home *** CD-ROM | disk | FTP | other *** search
/ ftp.swcp.com / ftp.swcp.com.zip / ftp.swcp.com / mac / Systems / quicktime-1-6-tech-note.hqx / QuickTime 1.6 Tech Note next >
Text File  |  1993-04-25  |  118KB  |  206 lines

  1. QuickTime 1.6 FeaturesQuickTime    QuickTime 1.6            April, 1993This note is a technical discussion of the changes between QuickTime 1.5 and QuickTime 1.6. QuickTime 1.6 introduces some new features, and is more reliable than other QuickTime versions. The note also discusses the new features of QuickTime 1.6's Component Manager.TopicsÑ    QuickTime 1.6 Features:         Describes how to access the new features.Ñ    Component Manager 3.0 Features:     Describes how to access the new features.Ñ    QuickTime 1.6 Bug Fixes:         Describes the bug fixes.QuickTime 1.6 FeaturesThe new features of QuickTime 1.6 are fully described in this note. These new features can be logically divided into two sections: "Features You Get For Free" and "Features You Get With Some Code." This documentation assumes the reader is QuickTime-literate. If this documentation does not suffice, refer to Inside Macintosh: QuickTime and Inside Macintosh: QuickTime Components which are currently available from APDA. In addition, most QuickTime questions are answered through rummaging through the sample code and/or applications on the QuickTime 1.5 CD. Also, the QuickTime 1.0 CD serves as an excellent reference.Features You Get For FreeThis section describes the features of QuickTime 1.6 which are added transparently to QuickTime. In general, your application will not have to do anything to your application for these features. But the user may have to install a specific extension and/or have the appropriate equipment. QuickTime 1.6 exploits these extensions: Sound Manager, Macintosh Easy Open, and ColorSync. In addition, it exploits the CD ROM 300(i), grayscale PowerBooks, Macintosh LC II class machines, Quadras, and stereo output devices. The exact nature of the exploitation is discussed in the various sections below.Reduced Memory FootprintQuickTime 1.6 code has been segmented. QuickTime's code segmentation allows unused code segments to be unloaded when not in use. QuickTime 1.6 uses less than 18k when installed whereas QuickTime 1.5 used approximately 160k.Because of this segmentation, substantially less memory is required for movie playback. If applications are not using a particular functionality, the corresponding code segments may be unloaded. For example, movie editing code will not be loaded unless the movie application requires it. Sound Manager 3.0 SupportQuickTime 1.6 is released with the new Sound Manager, Version 3.0. Since the new Sound Manager completely replaces the existing Sound Manager, it will work with all versions of QuickTime and all existing applications.  If the Sound Manager 3.0 is installed, QuickTime 1.6 will take advantage of it's new features.You can use QuickTime with the Sound Manager 3.0 in the following ways:Ñ  Spit multiple sound tracks into one sound resourceThe best feature of the new Sound Manager is the ability to mix multiple sound tracks into one sound resource.Ñ╩Play sound more efficientlyThe new Sound Manager lessens the load on the CPU for sound. As a rule of thumb, you will be able to get one extra frame per second for video playback.Ñ╩Support alternate sound output devicesThis allows you to hook up hardware to your Macintosh for CD quality 16-bit 44 kHz stereo sound output.Ñ╩Allow better control over multiple sound channelsWith Sound Manager 3.0, sound overdriving is now possible. By setting the movie volume above 1.0, the sound will actually be overdriven. Ñ    Support true balance controlÑ    Handle sound mixing better, which improves the quality of multiple sound track playbackÑ    Use the new Sound Control PanelCompact Video EnhancementCompact Video playback to 16 bit destinations (thousands of colors) is now higher quality. The dithering algorithm has been significantly improved.Audio CD ImportA Movie Import component has been provided which allows you to open Audio CD tracks from QuickTime╒s Standard File Preview dialog, just as you could open PICS and AIFF files with QuickTime 1.5. If you have a Apple CD 300 or CD 300i drive, you can use QuickTime 1.6 to convert tracks of your favorite audio CD directly into QuickTime movies. Figure 1. When you try to open an audio track on a CD 300(i), the Open button will change to a Convert╔ button. When you click this button, the Audio CD Import Options dialog will pop up. With this dialog, you can configure the sound settings of the movie. The rate, size, and channel can be specified for the movie.  In addition, you can select the portion of the track which should become a movie. You can select the start time and end time for the track. You can play your selection to be sure you have the selection you want.Text Track ExportA Text Movie Export component lets you easily extract text from movies. With Macintosh Easy Open installed, you can copy a series of text frames from a movie, and paste them directly into any application that supports text, such as MPW.Macintosh Easy Open SupportQuickTime 1.6 fully supports Macintosh Easy Open. Macintosh Easy Open is an Apple  system extension which provides document and clipboard translation for all applications. If a user has Macintosh Easy Open installed in combination with QuickTime 1.6, then they can copy and paste various media formats without thought.QuickTime 1.5 contained translation components for importing and exporting movie data from files and the clipboard. QuickTime 1.6 provides a Macintosh Easy Open translation component which makes all QuickTime movie import/export components work automatically with non-QuickTime-aware applications. For example, you can paste a sound track into a Sound Editing application, and it will translate the format from a QuickTime sound movie to a sound file.QuickTime 1.6 includes support for importing sound, PICTs, and PICS. It also supports exporting movies to PICT and sound. Additional MovieImport and MovieExport components can be found on the QuickTime 1.5 Developer CD in the Sample Components folder.Tear-free Movie PlaybackSupport has been added to the Image Compression Manager to reduce the tearing that is visible when playing back movies with large amounts of motion. The feature only works on machines with fast screen access, so it isn╒t usually enabled for NuBus video cards. Typically, better tear-free movie playback will be seen on Compact Video movies in 16-bit on a Quadra. A good movie to look to see the improvement is the beginning of ╥Everybody Loves Me But You╙ on the QuickTime 1.5 Developer CD.PowerBook Movie Playback EnhancementsThe PowerBooks which use 4-bit gray scale (PowerBook 160, 180, Duo 210, Duo 230) are supported using new fast dithering. All decompressors transparently take advantage of this fast dithering.YUV CodecA YUV Compressor/Decompressor Component has been added to QuickTime 1.6. It stores data in YUV 4:2:2 format. The compression algorithm is not lossless, but the image quality is extremely high. The compression ratio is 2:1. It does not support frame differencing. It is useful with certain video input solutions. In addition, it is also useful as an intermediate storage format if you are applying multiple effects or transitions to an image.By default, YUV does not appear in the Standard Compression dialog. If you hold down the option key when clicking on the compressor list to display the complete list, it will appear.Features You Get With Some CodeThis section describes the features of QuickTime 1.6 which are NOT added transparently to QuickTime. Your application will need new code to take advantage of them. In this section, the use of these features are explained.Movie Toolbox EnhancementsThe Movie Toolbox has three new calls, and two new flags. First, we will talk about the new flag. When using either PasteHandleIntoMovie or ConvertFileToMovieFile to import data into a movie, you can now set the showUserSettingsDialog flag. This will cause the user settings dialog for that import operation to be displayed, if there is one. For example, when importing a picture, this would cause the Standard Compression dialog to be displayed so the compression method could be selected.    showUserSettingsDialog = 2hintsHighQuality is a new flag to the SetMoviePlayHints and SetMediaPlayHints routines. It specifies that the given movie or media should render at the highest quality. Rendering at highest quality may take considerably more time and memory. Therefore, this mode is typically not appropriate for real time playback, but is very useful for recompressing as it can generate higher quality images.    hintsHighQuality = 1<<8            The high quality mode can be used with other media handlers as well. For example, the Video Media Handler turns off fast dithering and allows high quality dithering. Now we will introduce the three new Movie Toolbox calls.SetMovieDrawingCompleteProcSetMovieDrawingCompleteProc lets you set a call back procedure that is called after a Movie has drawn in one or more of its tracks. In this way, your application can be aware of when QuickTime has drawn frames, and when it hasn╒t. This information is very useful when combined with SetTrackGWorld (see below).pascal void SetMovieDrawingCompleteProc(Movie theMovie, MovieDrawingCompleteProcPtr proc, long refCon)theMovie    The Movie to set the proc on.proc    Your call back procedure, or nil to remove it.refCon    Value to pass to your call back procedure.typedef pascal OSErr (*MovieDrawingCompleteProcPtr)(Movie theMovie, long refCon);Errors invalidMovie     -2010    Your movie reference is bad.SetTrackGWorldSetTrackGWorld lets you force a track to draw into a particular GWorld. This GWorld may be different from that of the entire movie. After the track has drawn, it calls your transfer procedure to copy the track to the actual movie GWorld. When your transfer procedure is set, the current GWorld is set to the correct destination. You can also install a transfer procedure and set the GWorld to nil. This will result in your transfer procedure being called only as a notification that the track has drawn -- no transfer needs to take place.pascal void SetTrackGWorld(Track theTrack, CGrafPtr port, GDHandle gdh, TrackTransferProc proc, long refCon)theTrack    The track to set the proc to.port    The port for the track to draw to, or nil to use the Movie╒s GWorld.gdh    GDevice associated with the port.proc    Returns pointer to your transfer procedure, or nil to remove it.refCon     Value to pass to your tranfer procedure.typedef pascal OSErr (*TrackTransferProc)(Track t, long refCon);Errors invalidMovie     -2009    Your track reference is bad.GetMovieCoverProcsGetMovieCoverProcs lets you retrieve the cover procs that you set with SetMovieCoverProcs.pascal OSErr GetMovieCoverProcs(Movie theMovie, MovieRgnCoverProc *uncoverProc, MovieRgnCoverProc *coverProc, long *refcon)Movie    Movie reference.MovieRgnCoverProc    Returns the uncover proc for the movie.MovieRgnCoverProc    Returns the cover proc for the movie.long    Returns the refcon for the cover procedures.Errors invalidMovie     -2010    Your movie reference is bad.    Image Compression EnhancementsThe Image Compression has four new calls, and it's performance has been increased. Both the Photo CD and JPEG decompressors have been upgraded to directly support  the clipping of images. This greatly decreases the time necessary to display large images. In particular, it makes it much easier to work with high resolution Photo CD images. Now, we will discuss the four new calls.SetSequenceProgressProcSetSequenceProgressProc allows you to set a progress procedure on a Compression or Decompression Sequence, just as in the past you could have a progress procedure when compressing or decompressing a still image. pascal OSErr SetSequenceProgressProc(ImageSequence seqID, ProgressProcRecord *progressProc)seqID    Sequence identifier.progressProc    Pointer to a record containing information about the application's progress proc.The Image Compression Manager has 3 additional calls which allow applications to zoom a monitor. They are considered low-level calls (comparable to SetEntries) that should only be used when playing back QuickTime movies in a controlled environment with no user interaction.  Also, because this capability is not present on all machines, applications should not depend on its availability.The new calls provide a standard way for developers to access the 2x mode of a user╒s monitor for playback. Effectively, this allows you to have full screen Compact Video playback on low end Macintosh computers.Hardware 200% resize is currently available only on the Macintosh LC II, IIvx, IIvi, Performa 400, Performa 600, and Color Classic in 16-bit (thousands of colors) display mode on the 12-inch (512 x 384 pixels) monitors. In the future, other graphic devices may take advantage of it.To implement this functionality, the Image Compression Manager actually make calls to the Video Driver for the given device. Video card manufacturers interested in supporting this functionality in their cards should link DEVSUPPORT for more information.GDHasScaleGDHasScale returns the closest possible scaling that a particular screen device can be set to in a given pixel depth. It returns scaling information for a particular GDevice for a requested depth. It allows you to query a GDevice without actually changing it. For example, if you specify 0x20000, but the GDevice does not support it, GDHasScale will return with noErr, and a scale of 0x10000. Remember, it checks for a supported depth, so your requested depth must be supported by the GDevice. GDHasScale references the video driver through the graphics device structure.For multiple screens, see "Multiple Screen Revealed" in develop 10 to find out how to walk the GDeviceList.pascal OSErr GDHasScale(GDHandle gdh,short depth,Fixed *scale)gdh    a handle to a screen graphics device. depth    pixel depth of screen device.  Use this field to specify which pixel depth that scaling information should returned for.scale    a pointer to a fixed point scale value.  On input, this field should be set to the desired scale value.  On output, this field will contain the closest scale available for the given depth.  A scale of 0x10000 indicates normal size, 0x20000 indicates double size, etc.Errors cDepthErr    The requested depth is not supported.cDevErr    Not a screen device.controlErr    Video driver can not respond to this call.GDGetScaleGDGetScale returns the current scale of the given screen graphics device.pascal OSErr GDGetScale(GDHandle gdh,Fixed *scale,short *flags)gdh    a handle to a screen graphics device.scale    pointer to a fixed point field to hold the scale resultflags    pointer to a short.  It returns the status parameter flags for the video driver. For now, zero is always returned in this field.Errors cDevErr    Not a screen device.controlErr    Video driver can not respond to this call.GDSetScaleGDSetScale sets a screen graphics device to a new scale.pascal OSErr GDSetScale(GDHandle gdh,Fixed scale,short flags)gdh    a handle to a screen graphics device.scale    a fixed point scale value.flags    always pass zero.Errors cDevErr    Not a screen device.controlErr    Video driver can not respond to this call.Base Media Handler EnhancementsThe Base Media Handler interface has been extended with 3 new calls, and a new flag. These features were added to provide high quality movie playback. The text media handler takes advantage of these new calls, and provides built-in support for anti-aliased text. It is achieved through a playback hint to the base media handler, which the Apple Text Media Handler derives.  This hint, hintsHighQuality, has been discussed in the Movie Toolbox Enhancements section above.The MediaSetHints and MediaGetOffscreenBufferSize routines were added to the Derived Media Handler interface to support high quality mode. Since the Apple Text Media Handler derives the base media handler, it can use these new calls to support anti-aliased text.MediaSetHintsWhen SetMoviePlayHints or SetMediaPlayHints is called by an application, your media handler╒s MediaSetHints routine is called. This allows you to implement appropriate behavior for the various media hints such as scrub mode and high quality mode.pascal ComponentResult MediaSetHints (ComponentInstance ci, long hints)ci    Component instance of a base media handler.hints    All hint bits the currently apply to the given media.Errors badComponentInstance    0x80008001    Get a new component instanceMediaGetOffscreenBufferSize Before the Base Media Handler allocates an offscreen buffer for your Derived Media Handler, it calls your MediaGetOffscreenBufferSize routine to allow your media handler to chose the dimensions of the buffer. The depth and color table that will be used for the buffer are also passed. When you are called the rectBounds parameter specifies the size that the Base Media Handler will use for your offscreen by default. You can modify this as appropriate before returning. This capability is useful if your media handler can only draw at particular sizes. It is also useful for implementing anti-aliased drawing as you can request a buffer that is larger than your destination area, and have the Base Media Handler scale the image down for you. pascal ComponentResult MediaGetOffscreenBufferSize (ComponentInstance ci, Rect *rectBounds, short depth, CTabHandle ctab)ci    Component instance of a base media handler.Rect     The boundaries of your off-screen buffer.depth    Depth of the offscreen.ctab    Color table associated with off-screen. You can set it to nil.Errors badComponentInstance    0x80008001    Get a new component instance.MediaGetNameMediaGetName let's you retrieve the name of the media type. For example, the video media handler will return the string "Video".pascal ComponentResult MediaGetName(MediaHandler mh, Str255 name, long requestedLanguage, long *actualLanguage )ComponentInstance    The base media handler instance.Str255    The name of the media type.Long    A bunch of flags.Errors badComponentInstance    0x80008001    Get a new component instance.Text Media Handler EnhancementsThe text media handler interface includes 6 new flags, and one new routine. The flags let you control the behavior of the text media handler. The display flags are used in conjunction with the AddTESample and AddTextSample routines. The display flags are passed in the displayFlags parameter.dfContinuousScroll is a display flag which tells the Apple Text Media Handler to let new samples cause previous samples to scroll out.dfFlowHoriz is a display flag which tells the Apple Text Media Handler to let horizontally scrolled text to flow within the text box. This behavior contrasts with letting text flow as if the text box had no right edge.dfDropShadow is a display flag which tells the Apple Text Media Handler to support true drop shadows. Using SetTextSampleData, the position and translucency of the drop shadow is under application control.dfAntiAlias is a display flag which tells the Apple Text Media handler to attempt to display text anti-aliased.dfKeyedText is a display flag which tells the Apple Text Media handler to render text over the background without drawing the background color. This technique is otherwise known as "Masked Text."enum {dfContinuousScroll     = 1<<9, dfFlowHoriz         = 1<<10,dfDropShadow         = 1<<12,    dfAntiAlias         = 1<<13,    dfKeyedText         = 1<<14};findTextUseOffset is a new find text flag which instructs FindNextText to look at the value pointed to by the offset parameter and start the search at that offset into the text sample indicated by startTime. This allows you to continue a text search from within a given sample, so that multiple occurrences of the search string can be found within a single sample.findTextUseOffset = 16; SetTextSampleDataSetTextSampleData allows you to set values prior to calling AddTextSample or AddTESample. Two types are currently supported: 'drpo' and 'drpt'. The first type, 'drpo', is the drop shadow offset. Pass the address of a point for the data parameter. 'drpt' is the drop shadow translucency. Pass a value from 0 to 255, where 0 is the lightest and 256 is the darkest.pascal ComponentResult SetTextSampleData(MediaHandler mh, void *data, OSType dataType)mh    Reference to the text media handler. Could use GetMediaHandler.data    Pointer to data, defined by dataType parameter. handleType    Sets the type of data in the handle. For now, either 'drpo' or 'drpt'.Errors badComponentInstance    0x80008001    Your media handler reference is hosed.Here is some sample pseudo-code (it might not compile):short     trans = 127;Point    dropOffset;dropOffset.h = dropOffset.v = 4;SetSampleData(mh,(void *)&dropOffset,'drpo');SetSampleData(mh,(void *)&trans,'drpt');Be sure to turn on the dfDropShadow display flag when you call AddTextSample or AddTESample.Import/Export Component EnhancementsExport components have one new flag, one new error, two new functions, one new data structure, one new component, and an enhancement to the Sound Export component. The Text Movie export component was introduced above. Import components have one new function. The Audio CD Movie Import component was already introduced.canMovieExportAuxDataHandle is a movie export component flag. A Movie Export Component that supports the MovieExportGetAuxiliaryData call should also now set the canMovieExportAuxDataHandle flag in its ComponentFlags.    canMovieExportAuxDataHandle = 128The error auxiliaryExportDataUnavailable has been added. It will be returned by a Movie Export Component when MovieExportGetAuxiliaryData is called requesting a type of auxiliary data that the component cannot generate.     auxiliaryExportDataUnavailable = -2058The Sound Movie Export component has been updated to take advantage of the new Sound Manager. Previously, only the first sound track in the movie was exported. Now sound tracks are mixed together before being exported. If your application wants to take advantage of the sound mixing, you can use PutMovieIntoTypedHandle. It will take advantage of the export component. Furthermore, you can now specify the format of the exported sound, so you can convert 16 bit sound to 8 bit sound, or reduce stereo to mono.MovieExportSetSampleDescriptionMovieExportSetSampleDescription allows an application to request the format of the exported data, the routine MovieExportSetSampleDescription has been added. This call is currently supported by the Movie Export Sound Component.pascal ComponentResult MovieExportSetSampleDescription(MovieImportComponent  ci,    SampleDescriptionHandle desc, OSType mediaType)ci    Component Instance of movie import component.desc    Handle to a valid QuickTime sample description.mediaType    The type of the media that the sample description is from.Errors badComponentInstance    0x80008001    Get a new component instance.MovieImportGetAuxiliaryDataTypeMovieImportGetAuxiliaryDataType should return the type of the auxiliary data that it can accept. This is useful if you are interested with import components directly. For example, if you call the text import component with this call, it will indicate that it can accept 'styl' information.pascal ComponentResult MovieImportGetAuxiliaryDataType(MovieImportComponent  ci,     OSType *auxType)ci    The movie import component instance. Retrieve it with OpenDefaultComponent or OpenComponent.auxType    Pointer to the type of auxiliary data it can import. For example, a text import component can bring in 'text' data. But, if it says it can return 'styl', then it will import the style information as well.Errors badComponentInstance    0x80008001    Your movie import component reference is bad.Here is a new data structure for the text export component. This data is useful after a text track has been exported. An application may want to know the way the text was stored as a track.typedef struct {    long        displayFlags;    long        textJustification;    RGBColor    bgColor;    Rect        textBox;    short        beginHilite;    short        endHilite;    RGBColor    hiliteColor;    Boolean    doHiliteColor;    TimeValue    scrollDelayDur;    Point        dropShadowOffset;    short        dropShadowTransparency;} TextDisplayData;TextExportGetDisplayDataTextExportGetDisplayData returns the text display data for the text sample that was last exported by the given text export component. After exporting text from a text track, it is often useful to find out about the text track characteristics. This data structure contains this extra information.pascal ComponentResult TextExportGetDisplayData(TextExportComponent  ci,     TextDisplayData *data)ci    The text export component instance. Retrieve it with OpenDefaultComponent or OpenComponent.displayData    Pointer to the text display data.Errors badComponentInstance    0x80008001    Your movie import component reference is bad.ColorSyncColorSync is an extension for Macintosh providing a platform for consistent color reproduction between widely varying output devices. Color Matching ability was added to the Image Compression Manager DrawPicture calls. Accurate color reproduction of images (not movies) is made easier with QuickTime╒s flexible DrawPicture calls.  To enable color matching you simply set the useColorMatching flag in the flags parameter to these calls. You can set the flag even when ColorSync is not installed, although it will be ignored.    useColorMatching = 4Sequence Grabber EnhancementThe Sequence Grabber component has just one flag added to it. grabPictCurrentImage is a new flag to the SGGrabPict call. It provides the fastest possible image capture, but may fail under certain circumstances. This failure is not fatal; it just will not return a picture. The routine does not pause the current preview or grab the next frame. It causes the currently displayed image to be captured. It is a good idea to call SGPause yourself before calling SGGrabPict with this flag.    grabPictCurrentImage = 4Image Codec EnhancementThe interface for image codecs has three new functions and one new flag defined. codecConditionFirstScreen is a new  codec condition flag to the ImageCodec.h file.    #define codecConditionFirstScreen    (1L<<12)The Standard Compression Dialog now provides Compressor Components with the option of displaying their own settings within the dialog. If a compressor supports the dialog, an additional button will appear. The compressors settings are saved with the standard compressor settings when the SCGetInfo call is used with the scCodecSettingsType flag. The codec can implement the functionality using the following three routines.  CDRequestSettingsCDRequestSettings allows the display of a dialog of additional compression settings specific to the codec. This information is stored in a settings handle. The codec can store whatever data in any format wants in the settings handle and resize it accordingly.  It should store some type of tag/version information that it can use to verify that the data belongs to the codec.  The codec should NOT dispose the handle.pascal ComponentResult CDRequestSettings(ComponentInstance ci,  Handle settings, Rect *rp, ModalFilterProcPtr filterProc)ci    Component instance of codec.settings    Handle of data specific to the codec.  If the handle is empty, the codec should use some type of default settings.  rp    Pointer to rectangle giving the coordinates of the Standard Compression dialog in screen coordinates.  The codec can use this to position its dialog in the same area of the screen.filterProc    A pointer to modal dialog filter proc that the codec must either pass to ModalDialog or call at the beginning of the codec dialog's filter.  This proc gives the calling application and Standard Compression a chance to process update events.CDGetSettingsCDGetSettings allows a codec to get the settings chosen by a user. From this call, the codec should return its current internal settings.  If there are no current settings or the settings are the same as the defaults, the codec can set the handle to empty.pascal ComponentResult CDGetSettings(ComponentInstance ci,  Handle settings)ci    Component instance of codec.settings    A handle that the codec should resize and fill in with the current internal settings.  It should be resized to empty if there are no current internal settings.CDSetSettingsCDSetSettings allows a codec to set the settings of the optional dialog. Set the codecs current internal settings to the state specified in the settings handle.  The codec should always do a validity check on the contents of the handle so that invalid settings are never used.pascal ComponentResult CDSetSettings(ComponentInstance ci,  Handle settings)ci    Component Instance of movie import component.settings    A handle to internal settings original returned by either the CDRequestSettings or CDGetSettings calls.  The codec should set it's internal settings to match those of the settings handle.  Because the codec does not own the handle, it should not dispose of it, and should only copy its contents, not the handle itself.  If the settings handle passed in is empty, the codec should set its internal settings to a default state.New Component Manager FeaturesThe Component Manager in QuickTime 1.6 has some new features. The result returned for the selector, gestaltComponentMgr, will be 3, indicating version number 3 of the Component Manager. It has added the ability to automatically resolve conflicts between different versions of the same Component. It will ensure that only the most recent version of a given component is actually registered. In addition, the Component Manager now supports Icon Suites for a Component, so a Component╒s icon no longer has to be just black and white. The ComponentResource data structure can now have an optional extension. This extension defines additional information about the Component. The data structure is shown below.struct ComponentResourceExtension {    long    componentVersion;        /* version of Component */    long    componentRegisterFlags;    /* flags for registration */    short    componentIconSuite;        /* resource id of Icon Suite */};typedef struct ComponentResourceExtension ComponentResourceExtension;The ComponentResourceExtension is appended to the end of existing ComponentResource structures. The Component Manager determines if it is present by examining the size of the resource.The componentVersion field contains the version number of the component. This should be identical to the value returned by GetComponentVersion. For convenience, if this value is set to 0, the component is called to get the version. This is useful during development. The version number stored in the ComponentResourceExtension is used by the Component Manager to avoid having to load and call the Component to retrieve the Component╒s version during startup.The componentRegisterFlags allow you to define additional register information. These flags are shown below. // Component Resource Extension flagsenum {    componentDoAutoVersion = 1<<0,    componentWantsUnregister = 1<<1,    componentAutoVersionIncludeFlags = 1<<2};The componentDoAutoVersion flag tells the Component Manager that you only want your Component registered if there is no later version available. If there is an older version of the Component installed, it will be unregistered. If an older version of the same Component attempts to register after you, it will be immediately unregistered. Further, if a newer version of the same Component registers after you, you will automatically be unregistered. Using the automatic version control feature of the Component Manager allows you to make sure that only the most recent version of your software is running on a given machine, regardless of how many versions many be installed.The componentWantsUnregister flag indicates that your Component wants to be called when it is unregistered. This is useful if your component allocates global memory at register time, for example. The prototype of the unregister message is identical to the register message. If your component has never been opened, its unregister message will not be called. The routine selector for unregister is given below.The componentAutoVersionIncludeFlags flag tells the Component Manager to use the component flags as criteria for it's component search. If a component wants automatic version control, the Component Manager has to search for similar components. Normally, the Component Manager only searches for another component using the type, subType, and manufacturer fields of a ComponentDescription record. This flag tells the Component Manager to include the componentFlags in its search.#define kComponentUnregisterSelect      -7 Finally, the componentIconSuite field allows you to provide the resource id of a System 7 Icon Suite. If this field is 0, it indicates that there is no icon suite. GetComponentIconSuiteGetComponentIconSuite returns an Icon Suite for the given Component. This call only works on System 7 or later. If called on System 6, it returns an error. If the Component doesn╒t have an Icon Suite but does have a Component Icon (as returned by GetComponentInfo), GetComponentIconSuite creates an Icon Suite containing just the black and white Component Icon. In this way, you can use GetComponentIconSuite without regard to whether or not a Component has an Icon Suite or just simply a Component Icon.For more details on Icon Suites, see the Tech Note on Icon Suites (M.IM.IconDrawing), "Drawing Icons the System 7 Way".pascal OSErr GetComponentIconSuite(Component aComponent, Handle *iconSuite)aComponent    Component id, retrieved with FindNextComponent.iconSuite    Pointer to the icon suite you will receive.Errors invalidComponentID  -3000    Component reference is not valid.QuickTime 1.6 Bug FixesQuickTime 1.6 fixes all known bugs in QuickTime 1.5. Many of these bugs are listed below.Movie ToolboxÑ╩The Movie Toolbox interesting time calls have been substantially improved. The values returned are much more consistant and accurate.Ñ╩GetMoviePict has two major improvements:GetMoviePict  no longer fails on certain Compact Video movies.GetMoviePict now reports out of memory errors rather than returning empty pictures when memory is low.Ñ╩UpdateMovieResource has been fixed for single fork files.Ñ╩Editing movie's with alternate tracks no longer causes duplicate tracks to be created.Ñ╩Movie Uncover Procedures have been significantly improved. If a movie with tracks that are semi-transparent has a Movie Uncover procedure set (by SetMovieCoverProcs), the uncover procedure is now called before each frame to fill/erase the background. Previously the Movie Toolbox performed the erase, which limited a cover procedure aware application's options.Ñ╩The dialog sequence that appears when a movie data file is lost has been reworked to eliminate the "This is not a valid movie file" dialog.Ñ╩Fixed problem with deactivating and reactivating Compact Video movies that caused ╥shimmering╙ effects in the image.Ñ╩GetMoviePosterPict now properly handles tracks which are only in the poster and not in the movie.Ñ╩Movies played in loop mode using the Movie Controller no longer briefly pause when they jump from the end back to the beginning of the movie.Movie ControllerÑ╩The Movie Controller performs much smarter drawing, so it takes up less time during movie playback.Ñ╩The Movie Controller no longer leaves the port clip changed after drawing the badge.Movie Import/ExportÑ╩The Import AIFF Sound File to Movie component now always imports the entire file.Ñ╩The PICT and PICS import components no longer scale down images larger than the screen.Text Media HandlerÑ╩When multi-line text is grown, lines after line 1 were not displayed. The bug did not occur when grown exactly 2x. It is now fixed.Ñ╩Empty text samples sometimes caused the Text Media Handler to lose track of subsequent text size. It is now fixed.Ñ╩FindText did not do "case insensitive" searches properly. Furthermore it tried to dispose of the text string that was passed in. It is now fixed.Ñ╩FindText "wrap around" search did not always work properly. It now does.Ñ╩Hilite text samples did not always display properly. They now do.Ñ╩If the track contained multiple text descriptions, performance was sometimes severely degraded -- not anymore.Ñ╩Text clipping and scrolling is now much more reliable.Image Compression ManagerÑ    The AlignWindow call has been fixed to respect vertical repositioning.Compact VideoÑ    In some cases, the Compact Video compressor allowed the data rate to exceed the limit set by the calling application, causing playback problems from CD.  QuickTime 1.6 fixes this bug.Ñ    Decompressing gray scale Compact Video data to an 8-bit color destination no longer crashes.Photo CD DecompressorÑ    More accurate colors in decompression are displayed.Standard CompressionÑ    If scAllowZeroFrameRate is true, default to 0 frame rate.Ñ    The key frame rate now updates correctly when changed from hook procedure.Ñ    Rate-constrain item checked if non-zero default value present.Sequence GrabberÑ    Sound wouldn╒t get restarted or turned off correctly if the record bit wasn╒t set in its channel usage. It is now fixed.Ñ    Video panel does not bus error if the digitizer doesn't support hue.Component ManagerÑ The Component Manager no longer changes the current resource file when loading a Component.Ñ The Component Manager now tracks files using File ID's when possible, rather than FSSpec's.Ñ    Fixed obscure boot problem that would hang the machine when a component was called to register and the system heap was extremely low on free memory.Ñ    It is now OK to pass an empty handle to GetComponentInfo. This is helpful, since it can return them.Further Reference:Ñ    Inside Macintosh, QuickTimeÑ    Inside Macintosh, QuickTime Componentsα╫#      #╫íd WORDS╩áîíd WORDR╔áé 
  2. 66ê 
  3.     0Iê:╡£≡9"é÷            #á─íd
  4. ONLNf■áîíd1drw2╔-ß_Ç      Åíû xíddrw2:íddrw2:$íd4drw2:íÜ ·ù@áÿ,Times.WIQkWIQk+9INew Technical NotesáÖíddrw2:íπáùíd1drw2e⌠Ç      Píû xíddrw2:íddrw2:$íd4drw2:íÜ √ÇE└áÿ!(éqDeveloper SupportáÖíddrw2:íπáùíd`drw2-∩      K∩- Z  m°m6íd1drw2╩└·Θ      Kíû xíddrw2:íddrw2:$íd4drw2:0íÜ ⌠Çáÿ0(\╦≡áÖíddrw2:íπáùíd1drw2∩µ·≡      íû xíddrw2:íddrw2:$íd4drw2:    íÜ ²Çáÿ    l+&    ¿áÖíddrw2:íπáùíd1drw2σ-°y      íû xíddrw2:íddrw2:$íd4drw2:íÜ √Ç%áÿBÇ(a8    MacintosháÖíddrw2:íπáùáìíddrw2DáâídWORDáì
  5. d.ídONLNdvê╥(ú6QuickTime 1.6 FeaturesídONLNdûñ\*    QuickTimeídONLNd!ûüñ┌(└ƒQuickTime 1.6 ídONLNd2░Ñ╝┌+$ April, 1993ídONLNd>╚╘╚(≡6'This note is a technical discussion of ídONLNde╚╚╘┌)░4the changes between QuickTime 1.5 and QuickTime 1.6.ídONLNdÜ╘αf(ⁿ6QuickTime 1.6 ídONLNd¿╘fα┌)NGintroduces some new features, and is more reliable than other QuickTimeídONLNd≡α∞╦(6Xversions. The note also discusses the new features of QuickTime 1.6's Component Manager.ídONLNdI°;*TopicsídONLNdP37+ ÑídONLNdR<┤)    QuickTime 1.6 Features: ídONLNdl≡╡)┤)Describes how to access the new features.ídONLNdû37(8QÑídONLNdÿ<π)     Component Manager 3.0 Features: ídONLNd╣≡╡)┤)Describes how to access the new features.ídONLNdπ3(7(DQÑídONLNdσ<(╜)    QuickTime 1.6 Bug Fixes: ídONLNd≡(b)┤Describes the bug fixes. _4_∙ídONLNd_q╥(î6QuickTime 1.6 Features É4É∙ ídONLNd0ï╙*&The new features of QuickTime 1.6 are ídONLNdV╙ï┌)╗7fully described in this note. These new features can beídONLNdÄïùh(│6logically divided ídONLNdáïhù┌)PIinto two sections: "Features You Get For Free" and "Features You Get WithídONLNdΩùúW(┐6 Some Code."ídONLNd≈»╗P*@This documentation assumes the reader is QuickTime-literate. If ídONLNd7»P╗┌(╫nthis documentation does notídONLNdS╗╟V(π6suffice, refer ídONLNdb╗V╟c)>to ídONLNde╗c╟≥)Inside Macintosh: QuickTimeídONLNdÇ╗≥╟ )Å and ídONLNdà╗ ╟┌)&Inside Macintosh: QuickTime ComponentsídONLNd¼╟╙2(∩6;which are currently available from APDA. In addition, most ídONLNdτ╟2╙┌(∩P QuickTime questions are answeredídONLNd╙▀(√61through rummaging through the sample code and/or ídONLNd9╙▀┌) %applications on the QuickTime 1.5 CD.ídONLNd_▀δ7(6<Also, the QuickTime 1.0 CD serves as an excellent reference.ídONLNd£≈    Ω*Features You Get For Free (4(∙ ídONLNd╢#3*This ídONLNd╗3#┌)Psection describes the features of QuickTime 1.6 which are added transparently toídONLNd #/≡(K6-QuickTime. In general, your application will ídONLNd9#≡/┌)╪/not have to do anything to your application forídONLNdi/;╔(W6&these features. But the user may have ídONLNdÅ/╔;┌)▒;to install a specific extension and/or have the appropriateídONLNd╦;G╛(c6Requipment. QuickTime 1.6 exploits these extensions: Sound Manager, Macintosh Easy ídONLNd;╛G┌(c▄Open,ídONLNd#GS(o63and ColorSync. In addition, it exploits the CD ROM ídONLNdVGS┌)·'300(i), grayscale PowerBooks, MacintoshídONLNd~S_ù({6RLC II class machines, Quadras, and stereo output devices. The exact nature of the ídONLNd╨Sù_┌({╡exploitation isídONLNdα_k╙(ç6(discussed in the various sections below. í└⌠%%DSIDICT:_cvcurrentdict /bu known {bu}ifuserdict /_cv known not{userdict /_cv 30 dict put}if_cv begin/bdf{bind def}bind defcurrentscreen/cs exch def/ca exch def/cf exch def/setcmykcolor where{/setcmykcolor get /cvcmyk exch def}{/cvcmyk{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat setrgbcolor pop}bdf }ifelse/ss{//cf //ca //cs setscreen}bdf/stg{ss setgray}bdf/strgb{ss setrgbcolor}bdf/stcmyk{ss cvcmyk}bdf/min1{dup 0 eq{pop 1}if}bdfendcurrentdict /bn known {bn}ifá┐░╫#      #╫ 
  6. d,Times
  7. .+6,Macintosh Technical Notes .4.∙ídONLNd(6┬*&Reduced Memory Footprint U4U∙ ídONLNdCO╘*WQuickTime 1.6 code has been segmented. QuickTime's code segmentation allows unused codeídONLNdqO[┼* Xsegments to be unloaded when not in use. QuickTime 1.6 uses less than 18k when installedídONLNd╩[g* .whereas QuickTime 1.5 used approximately 160k.ídONLNd∙s└*ZBecause of this segmentation, substantially less memory is required for movie playback. IfídONLNdTï╠* ]applications are not using a particular functionality, the corresponding code segments may beídONLNd▓ïù╛* Yunloaded. For example, movie editing code will not be loaded unless the movie applicationídONLNd ùúJ* requires it.ídONLNd╗╔─*&Sound Manager 3.0 Support Φ4Φ∙ ídONLNd4╓Γ█*'QuickTime 1.6 is released with the new ídONLNd[╓█Γ┌)├/Sound Manager, Version 3.0. Since the new SoundídONLNdïΓεú(
  8. 6NManager completely replaces the existing Sound Manager, it will work with all ídONLNd┘Γúε┌(
  9. ┴ versions ofídONLNdσε·F(6?QuickTime and all existing applications.  If the Sound Manager ídONLNd$εF·┌(d3.0 is installed, QuickTime 1.6ídONLNdD·╬("6)will take advantage of it's new features.ídONLNdn}*GYou can use QuickTime with the Sound Manager 3.0 in the following ways:ídONLNd╢*!6+    5Ñ  Spit multiple sound tracks into one sound resourceídONLNd∞63B*+ 1The best feature of the new Sound Manager is the ídONLNd6*B┌)≈$ability to mix multiple sound tracksídONLNdBB3Nº(jQinto one sound resource.ídONLNd[Z!f¬(é?Ñ╩Play sound more efficientlyídONLNdyf3rû+ GThe new Sound Manager lessens the load on the CPU for sound. As a rule ídONLNd└fûr┌(Ä┤of thumb, youídONLNd╬r3~d(ÜQBwill be able to get one extra frame per second for video playback.ídONLNdè!û▐(▓?(Ñ╩Support alternate sound output devicesídONLNd:û3óö+ EThis allows you to hook up hardware to your Macintosh for CD quality ídONLNdûöó┌(╛▓16-bit 44 kHzídONLNdìó3«ô(╩Qstereo sound output.ídONLNdó║!╞(Γ?3Ñ╩Allow better control over multiple sound channelsídONLNd╓╞3╥t+ With Sound ídONLNdß╞t╥┌)ADManager 3.0, sound overdriving is now possible. By setting the movieídONLNd&╥3▐8(·Q8volume above 1.0, the sound will actually be overdriven.ídONLNd`Ω!÷%(?ÑídONLNdbΩ*÷»)    Support true balance controlídONLNd!%(*?ÑídONLNdü*═)    WHandle sound mixing better, which improves the quality of multiple sound track playbackídONLNd┘!&%(B?ÑídONLNd█*&╩)    Use the new Sound Control PanelídONLNd√>L═(h6Compact Video Enhancement k4k∙ ídONLNdYeí*RCompact Video playback to 16 bit destinations (thousands of colors) is now higher ídONLNdgYíe┌(ü┐ quality. TheídONLNdteq(ì64dithering algorithm has been significantly improved. ▀4▀∙
  10. *e2) of 18(≥æQuickTime 1.6 Tech Note     ¿╫#      #╫ 
  11. d,Times
  12. .+6,Developer Technical Support(,╠
  13. April 1993 .4.∙ídONLNd(6ä(R6Audio CD Import U4U∙ ídONLNdCOj*A Movie Import ídONLNdCjO┌)RDcomponent has been provided which allows you to open Audio CD tracksídONLNddO[í(w6from QuickTime╒s Standard ídONLNd~Oí[┌)ë?File Preview dialog, just as you could open PICS and AIFF filesídONLNd╛[gÑ(â6Mwith QuickTime 1.5. If you have a Apple CD 300 or CD 300i drive, you can use ídONLNd [Ñg┌(â├    QuickTimeídONLNdgsÄ(Å6O1.6 to convert tracks of your favorite audio CD directly into QuickTime movies.
  14. ₧îó,    GenevacóKycóKyídONLNd  +⌐║QuickTime¬ and aídONLNd  (U╧Graphics decompressorídONLNd  (a╕! are needed to see this picture
  15. dídONLNdfⁿ
  16. R(&6
  17. Figure 1.  ídONLNdp■R
  18. ):'When you try to open an audio track on ídONLNdù■
  19. ┌)┐(a CD 300(i), the Open button will changeídONLNd└
  20. ╔(26Uto a Convert╔ button. When you click this button, the Audio CD Import Options dialog ídONLNd
  21. ╔┌(2τwillídONLNd"(>66pop up. With this dialog, you can configure the sound ídONLNdP"┌(>7*settings of the movie. The rate, size, andídONLNd{".æ(J6channel can be specified ídONLNdö"æ.┌)yDfor the movie.  In addition, you can select the portion of the trackídONLNd┘.:D(V6?which should become a movie. You can select the start time and ídONLNd.D:┌(Vbend time for the track. You canídONLNd8:F=(b6?play your selection to be sure you have the selection you want.ídONLNdxbpë**Text Track Export Å4Å∙ ídONLNdè}ë├*WA Text Movie Export component lets you easily extract text from movies. With Macintosh ídONLNdß}├ë┌(ÑßEasyídONLNdµëò╓(▒6)Open installed, you can copy a series of ídONLNdë╓ò┌)╛6text frames from a movie, and paste them directly intoídONLNdFòí (╜60any application that supports text, such as MPW. ▀4▀∙
  22. *5QuickTime 1.6 Tech Note(≥█3) of 18 ö╫#      #╫ 
  23. d,Times
  24. .+6,Macintosh Technical Notes .4.∙ídONLNd*8╥*(Macintosh Easy Open Support W4W∙ ídONLNdEQR*
  25. QuickTime ídONLNd&ERQ┌):G1.6 fully supports Macintosh Easy Open. Macintosh Easy Open is an AppleídONLNdoQ]x(y6Gsystem extension which provides document and clipboard translation for ídONLNd╢Qx]┌(yûall applications. If aídONLNd═]iD(à6    user has ídONLNd╓]Di┌),NMacintosh Easy Open installed in combination with QuickTime 1.6, then they canídONLNd%iu(æ65copy and paste various media formats without thought.ídONLNd[üì*/QuickTime 1.5 contained translation components ídONLNdèüì┌)Ω+for importing and exporting movie data fromídONLNd╢ìÖ8(╡6<files and the clipboard. QuickTime 1.6 provides a Macintosh ídONLNd≥ì8Ö┌(╡VEasy Open translation componentídONLNdÖѬ(┴6Lwhich makes all QuickTime movie import/export components work automatically ídONLNd^Ö¬Ñ╓(┴╚with nonídONLNdfÖ╓Ñ┌),-ídONLNdgÑ▒(═63QuickTime-aware applications. For example, you can ídONLNdÜÑ▒┌)²(paste a sound track into a Sound EditingídONLNd├▒╜╜(┘6[application, and it will translate the format from a QuickTime sound movie to a sound file.ídONLNd╔╒f*QuickTime 1.6 ídONLNd-╔f╒┌)NGincludes support for importing sound, PICTs, and PICS. It also supportsídONLNdu╒ß^(²6?exporting movies to PICT and sound. Additional MovieImport and ídONLNd┤╒^ß┌(²|MovieExport componentsídONLNd╦ßφ¬(    6Ocan be found on the QuickTime 1.5 Developer CD in the Sample Components folder.ídONLNd┤*&Tear-free Movie Playback 242∙ ídONLNd4 ,w*FSupport has been added to the Image Compression Manager to reduce the ídONLNdz w,┌(Hòtearing that is visibleídONLNdÆ,8╚(T6$when playing back movies with large ídONLNd╢,╚8┌)░5amounts of motion. The feature only works on machinesídONLNd∞8DU(`6Ewith fast screen access, so it isn╒t usually enabled for NuBus video ídONLNd18UD╓(`scards. Typically, better tearídONLNdN8╓D┌)ü-ídONLNdODP╣(l6!free movie playback will be seen ídONLNdpD╣P┌)í5on Compact Video movies in 16-bit on a Quadra. A goodídONLNdªP\µ(x6,movie to look to see the improvement is the ídONLNd╥Pµ\┌)╬,beginning of ╥Everybody Loves Me But You╙ onídONLNd \h║(ä6the QuickTime 1.5 Developer CD.ídONLNdÇÄ*&%PowerBook Movie Playback Enhancements ¡4¡∙ ídONLNdE¢º±**The PowerBooks which use 4-bit gray scale ídONLNdo¢±º┌)┘*(PowerBook 160, 180, Duo 210, Duo 230) areídONLNdܺ│(╧66supported using new fast dithering. All decompressors ídONLNd╨º│┌(╧:)transparently take advantage of this fastídONLNd·│┐E(█6
  26. dithering.ídONLNd╫σ_*&    YUV Codec 4∙ ídONLNd≥■╞*A YUV Compressor/Decompressor ídONLNd-≥╞■┌)«4Component has been added to QuickTime 1.6. It storesídONLNdb■
  27. :(&6data in ídONLNdj■:
  28. ┌)"UYUV 4:2:2 format. The compression algorithm is not lossless, but the image quality isídONLNd└
  29. b(26Bextremely high. The compression ratio is 2:1. It does not support ídONLNd
  30. b┌(2Çframe differencing. It isídONLNd"(>6;useful with certain video input solutions. In addition, it ídONLNdW"┌(>8)is also useful as an intermediate storageídONLNdü".[(J6Gformat if you are applying multiple effects or transitions to an image.ídONLNd╔:F|*GBy default, YUV does not appear in the Standard Compression dialog. If ídONLNd    :|F┌(bÜyou hold down theídONLNd    "FR╜(n6]option key when clicking on the compressor list to display the complete list, it will appear.ídONLNd    Çj|)*)Features You Get With Some Code ¢4¢∙ ídONLNd    áèû*This section describes the features of QuickTime ídONLNd    ╤èû┌)≡(1.6 which are NOT added transparently toídONLNd    ·ûóµ(╛6*QuickTime. Your application will need new ídONLNd
  31. $ûµó┌)╬4code to take advantage of them. In this section, theídONLNd
  32. Yó«╝(╩6$use of these features are explained. ▀4▀∙
  33. *(4) of 18(≥æQuickTime 1.6 Tech Note î╫#      #╫ 
  34. d,Times
  35. .+6,Developer Technical Support(,╠
  36. April 1993 .4.∙ídONLNd*8╬(T6Movie Toolbox Enhancements W4W∙ ídONLNdEQi*DThe Movie Toolbox has three new calls, and two new flags. First, we ídONLNd_EiQ┌(mçwill talk about the newídONLNdwQ]Ä(y6flag. When using either ,
  37. Courier    ídONLNdÅRÄ]≥)vPasteHandleIntoMovie ídONLNdúQ≥])d or     ídONLNdºR]r)ConvertFileToMovieFile ídONLNd╜Qr]ª)n  to import ídONLNd╚Qª]┌)4 data into aídONLNd╘]iÖ(à6movie, you can now set the     ídONLNd∩^Öi)üshowUserSettingsDialog ídONLNd]ik)n flag. This will cause ídONLNd]ki┌)dthe user settings dialogídONLNd5iu`(æ6Ifor that import operation to be displayed, if there is one. For example, ídONLNd~i`u┌(æ~when importing a picture,ídONLNdÿuü    (¥61this would cause the Standard Compression dialog ídONLNd╔u    ü┌)±)to be displayed so the compression methodídONLNd≤üìk(⌐6could be selected.    ídONLNdù<ó╛+$showUserSettingsDialog = 2ídONLNd"¼╖h(╙6hintsHighQuality ídONLNd2½h╖£)P
  38.  is a new ídONLNd<½£╖╫)4 flag to the     ídONLNdH¼╫╖,);SetMoviePlayHints ídONLNdY½,╖I)U and     ídONLNd^¼I╖₧)SetMediaPlayHints ídONLNdo½₧╖┌)U routines. ItídONLNd}╖├▐(▀6(specifies that the given movie or media ídONLNdÑ╖▐├┌)╞2should render at the highest quality. Rendering atídONLNd╪├╧?(δ6<highest quality may take considerably more time and memory. ídONLNd├?╧┌(δ]!Therefore, this mode is typicallyídONLNd6╧█₧(≈6Snot appropriate for real time playback, but is very useful for recompressing as it ídONLNdë╧₧█┌(≈╝ can generateídONLNdû█τÇ(6higher quality images.    ídONLNd«≤<■»+$hintsHighQuality = 1<<8 ídONLNd╔    à(16The high quality mode ídONLNd▀    à┌)mEcan be used with other media handlers as well. For example, the VideoídONLNd%!Ö(=6QMedia Handler turns off fast dithering and allows high quality dithering. Now we ídONLNdvÖ!┌(=╖will introduceídONLNdà!-╜(I6"the three new Movie Toolbox calls.ídONLNd¿9!E╚+    SetMovieDrawingCompleteProc d=d∙    ídONLNd─Q!\¿*SetMovieDrawingCompleteProc ídONLNd▀P¿\å)ç3 lets you set a call back procedure that is called ídONLNdPå\┌)▐after a Movie hasídONLNd$\!h0(ä?6drawn in one or more of its tracks. In this way, your ídONLNdZ\0h┌(äN application can be aware of whenídONLNd{h!t(É?0QuickTime has drawn frames, and when it hasn╒t. ídONLNd½ht┌)²$This information is very useful whenídONLNd╨t!Çi(£?combined with     ídONLNd▐uiÇ»)HSetTrackGWorld ídONLNd∞t»Çδ)F (see below).    ídONLNd·è!ò└(▒?Spascal void SetMovieDrawingCompleteProc(Movie theMovie, MovieDrawingCompleteProcPtrídONLNdNö!ƒ{*
  39. proc, long refCon)ídONLNda¿!│I*theMovieídONLNdj¿ä│)cThe Movie to set the proc on.ídONLNdê▓!╜5(┘?procídONLNdì▓ä╜j)c.Your call back procedure, or nil to remove it.ídONLNd╝╝!╟?(π?refConídONLNd├╝ä╟V)c*Value to pass to your call back procedure.ídONLNdε╨!█╢(≈?Qtypedef pascal OSErr (*MovieDrawingCompleteProcPtr)(Movie theMovie, long refCon); ídONLNd@Σ!≡C*Errors    ídONLNdH≡!√b* invalidMovie ídONLNdV≡ä√¥)c-2010ídONLNd\≡¿√4)$Your movie reference is bad. ídONLNdy!{(.?SetTrackGWorld 1=1∙    ídONLNdê!g*SetTrackGWorld ídONLNdûg
  40. )F% lets you force a track to draw into ídONLNd╗
  41. ┌)ú'a particular GWorld. This GWorld may beídONLNdπ!+Ç(G?different from that ídONLNd≈Ç+┌)_Fof the entire movie. After the track has drawn, it calls your transferídONLNd>+!7î(S?Kprocedure to copy the track to the actual movie GWorld. When your transfer ídONLNdë+î7┌(S¬procedure is set,ídONLNd¢7!C¿(_?the current GWorld is set to ídONLNd╕7¿C┌)çBthe correct destination. You can also install a transfer procedureídONLNd√C!OE(k?and set ídONLNd    CEO┌)$Uthe GWorld to nil. This will result in your transfer procedure being called only as aídONLNd    YO![g(w?Inotification that the track has drawn -- no transfer needs to take place. ▀4▀∙
  42. (≥6QuickTime 1.6 Tech Note(≥█5) of 18 ╛╫#      #╫ 
  43. d,Times
  44. .+6,Macintosh Technical Notes .4.∙,
  45. Courier    ídONLNd!'ä+    Gpascal void SetTrackGWorld(Track theTrack, CGrafPtr port, GDHandle gdh,ídONLNdH&!1╒*
  46. $TrackTransferProc proc, long refCon)ídONLNdm:!EI*theTrackídONLNdv:äE)cThe track to set the proc to.ídONLNdöD!O5(k?portídONLNdÖDäO╪)cDThe port for the track to draw to, or nil to use the Movie╒s GWorld.ídONLNd▐N!Y0(u?gdhídONLNdΓNäY))c!GDevice associated with the port.ídONLNdX!c5(?procídONLNd    Xäc─)c@Returns pointer to your transfer procedure, or nil to remove it.ídONLNdJb!mD(ë?refCon ídONLNdRbämL)c(Value to pass to your tranfer procedure.ídONLNd{v!üa(¥?@typedef pascal OSErr (*TrackTransferProc)(Track t, long refCon); ídONLNd╝î!ÿC*Errors    ídONLNd─ÿ!úb* invalidMovie ídONLNd╥ÿäú¥)c-2009ídONLNd╪ÿ¿ú4)$Your track reference is bad. ídONLNd⌡«!║Ä(╓?GetMovieCoverProcs ┘=┘∙    ídONLNd╝!╟{*GetMovieCoverProcs ídONLNd╗{╟e)Z5 lets you retrieve the cover procs that you set with     ídONLNdO╝e╟┐)ΩSetMovieCoverProcs ídONLNda╗┐╟┬)Z.    ídONLNdc╤!▄¼(°?Opascal OSErr GetMovieCoverProcs(Movie theMovie, MovieRgnCoverProc *uncoverProc,ídONLNd│█!µ°*
  47. +MovieRgnCoverProc *coverProc, long *refcon)ídONLNd▀∩!·:*MovieídONLNdσ∩ä·╘)cMovie reference.ídONLNd÷∙!v( ?MovieRgnCoverProcídONLNd∙äG)c'Returns the uncover proc for the movie.ídONLNd0!v(*?MovieRgnCoverProcídONLNdBä=)c%Returns the cover proc for the movie.ídONLNdh!5(4?longídONLNdmä`)c,Returns the refcon for the cover procedures. ídONLNdÜ#!/C(K?Errors    ídONLNdó/!:b* invalidMovie ídONLNd░/ä:¥)c-2010ídONLNd╢/¿:4)$Your movie reference is bad.ídONLNd╒Q_δ({6Image Compression Enhancements ~4~∙ ídONLNd⌠lx╣*The Image Compression has four ídONLNdl╣x┌)í<new calls, and it's performance has been increased. Both theídONLNdPxäd(á6?Photo CD and JPEG decompressors have been upgraded to directly ídONLNdÅxdä┌(áésupport  the clipping ofídONLNd¿äÉ╝(¼6]images. This greatly decreases the time necessary to display large images. In particular, it ídONLNdä╝É┌(¼┌makesídONLNd É£│(╕6Rit much easier to work with high resolution Photo CD images. Now, we will discuss ídONLNd]É│£┌(╕╤the fourídONLNdf£¿F(─6
  48. new calls.ídONLNdq┤!└ñ+    SetSequenceProgressProc ▀=▀∙    ídONLNdë┬!═ö*SetSequenceProgressProc ídONLNdá┴ö═σ)s allows you to ídONLNd»┴σ═┌)Q,set a progress procedure on a Compression orídONLNd▄═!┘R(⌡?;Decompression Sequence, just as in the past you could have ídONLNd═R┘┌(⌡pa progress procedure whenídONLNd1┘!σ≥(?+compressing or decompressing a still image.    ídONLNd^±!ⁿ¥*Lpascal OSErr SetSequenceProgressProc(ImageSequence seqID, ProgressProcRecordídONLNd½√!g*
  49. *progressProc)ídONLNd║!:*seqIDídONLNd└äΦ)cSequence identifier.ídONLNd╒!$](@? progressProcídONLNdΓä$╬)cBPointer to a record containing information about the application'sídONLNd%#ä.╩*
  50. progress proc. ídONLNd49E╘(a6"The Image Compression Manager has ídONLNdV9╘E┌)╝53 additional calls which allow applications to zoom aídONLNdîEQ⌐(m6monitor. They are considered ídONLNd⌐E⌐Q?)ælow-level calls (comparable to     ídONLNd╚F?Qq)û
  51. SetEntries ídONLNd╥EqQ┌)2) that should only beídONLNdΦQ](y6+used when playing back QuickTime movies in ídONLNdQ]┌)°%a controlled environment with no userídONLNd9]i*(à6>interaction.  Also, because this capability is not present on ídONLNdw]*i┌(àH%all machines, applications should notídONLNd¥iuÅ(æ6depend on its availability.ídONLNd╣üìN*BThe new calls provide a standard way for developers to access the ídONLNd√üNì┌(⌐lx mode of a user╒s monitorídONLNd    ìÖ╕(╡6Vfor playback. Effectively, this allows you to have full screen Compact Video playback ídONLNd    mì╕Ö┌(╡╓on lowídONLNd    tÖÑò(┴6end Macintosh computers. ▀4▀∙
  52. *16) of 18(≥æQuickTime 1.6 Tech Note X╫#      #╫ 
  53. d,Times
  54. .+6,Developer Technical Support(,╠
  55. April 1993 .4.∙ ídONLNd(h(D6Hardware 200% ídONLNdh(┌)POresize is currently available only on the Macintosh LC II, IIvx, IIvi, PerformaídONLNd^(4╠(P6%400, Performa 600, and Color Classic ídONLNdâ(╠4╓)┤6in 16-bit (thousands of colors) display mode on the 12ídONLNd╣(╓4┌(P⌠-ídONLNd║4@╥(\6`inch (512 x 384 pixels) monitors. In the future, other graphic devices may take advantage of it.ídONLNdLXs*To implement this ídONLNd-LsX┌)[Gfunctionality, the Image Compression Manager actually make calls to theídONLNduXd\(Ç6Video Driver ídONLNdéX\d┌)DLfor the given device. Video card manufacturers interested in supporting thisídONLNd╧dp╬(î6)functionality in their cards should link ídONLNd°d╬p )╢
  56. DEVSUPPORTídONLNdd pë)R for more information.ídONLNd|!êb(ñ?
  57. GDHasScale º=º∙,
  58. Courier    ídONLNd$è!òS*
  59. GDHasScale ídONLNd.ëSò¢)2J returns the closest possible scaling that a particular screen device can ídONLNdxë¢ò┌(▒╣be set to in aídONLNdçò!í_(╜?Cgiven pixel depth. It returns scaling information for a particular ídONLNd╩ò_í┌(╜}GDevice for a requestedídONLNdΓí!¡▒(╔?depth. It allows you to query ídONLNdí▒¡┌)É;a GDevice without actually changing it. For example, if youídONLNd<¡!╣F(╒?specify     ídONLNdD«F╣i)%0x20000 ídONLNdK¡i╣╜)#, but the GDevice ídONLNd]¡╜╣)Tdoes not support it,     ídONLNdr«╣P)a
  60. GDHasScale ídONLNd|¡P╣í)2 will return with     ídONLNdÄ«í╣║)QnoErr ídONLNdô¡║╣┌), and aídONLNd¢╣!┼H(ß?    scale of     ídONLNdñ║H┼k)'0x10000 ídONLNd½╣k┼û)#?. Remember, it checks for a supported depth, so your requested ídONLNdΩ╣û┼┌(ß┤depth must beídONLNd°┼!╤ó(φ?supported by the GDevice.     ídONLNd╞ó╤╘)ü
  61. GDHasScale ídONLNd┼╘╤7)2 references the video ídONLNd2┼7╤┌)c"driver through the graphics deviceídONLNdU╤!▌M(∙?
  62. structure.ídONLNd`Θ!⌡5*For ídONLNddΘ5⌡┌)Vmultiple screens, see "Multiple Screen Revealed" in develop 10 to find out how to walkídONLNd╗⌡!p(?the GDeviceList.    ídONLNd╠!W*>pascal OSErr GDHasScale(GDHandle gdh,short depth,Fixed *scale)ídONLNd !!,0*gdhídONLNd!ä,=)c%a handle to a screen graphics device.ídONLNd6+!6:(R?depthídONLNd<+ä6╪)cDpixel depth of screen device.  Use this field to specify which pixelídONLNdü5ä@â*
  63. 3depth that scaling information should returned for.ídONLNd╡?!J:(f?scaleídONLNd╗?äJ╪)cDa pointer to a fixed point scale value.  On input, this field shouldídONLNdIäT║*
  64. >be set to the desired scale value.  On output, this field willídONLNd?Sä^╪*
  65. Dcontain the closest scale available for the given depth.  A scale ofídONLNdä]äh╬*
  66. B0x10000 indicates normal size, 0x20000 indicates double size, etc. ídONLNd╟s!C(¢?Errors    ídONLNd╧!èN*     cDepthErrídONLNd┘äè=)c%The requested depth is not supported.ídONLNd ë!öD(░?cDevErrídONLNdëäöΦ)cNot a screen device.ídONLNdô!₧S(║?
  67. controlErrídONLNd'ôä₧V)c*Video driver can not respond to this call. ídONLNdR⌐!╡`(╤?
  68. GDGetScale ╘=╘∙    ídONLNd]╖!┬S*
  69. GDGetScale ídONLNdg╢S┬o)2? returns the current scale of the given screen graphics device.    ídONLNdº╠!╫\(≤??pascal OSErr GDGetScale(GDHandle gdh,Fixed *scale,short *flags)ídONLNdτα!δ0*gdhídONLNdδαäδ=)c%a handle to a screen graphics device.ídONLNdΩ!⌡:(?scaleídONLNdΩä⌡ù)c7pointer to a fixed point field to hold the scale resultídONLNdO⌠! :(?flagsídONLNdU⌠ä ╬)cBpointer to a short.  It returns the status parameter flags for theídONLNdÿ■ä    ╡*
  70. =video driver. For now, zero is always returned in this field. ídONLNd╓! C(<?Errors    ídONLNd▐ !+D* cDevErrídONLNdµ ä+Φ)cNot a screen device.ídONLNd√*!5S(Q?
  71. controlErrídONLNd    *ä5V)c*Video driver can not respond to this call. ídONLNd    1L!X^(t?
  72. GDSetScale w=w∙ídONLNd    <Y!e+*8GDSetScale sets a screen graphics device to a new scale.    ídONLNd    uo!zR*=pascal OSErr GDSetScale(GDHandle gdh,Fixed scale,short flags)ídONLNd    │â!Ä0*gdhídONLNd    ╖âäÄ=)c%a handle to a screen graphics device.ídONLNd    ▌ì!ÿ:(┤?scaleídONLNd    πìäÿ)ca fixed point scale value.ídONLNd    ■ù!ó:(╛?flagsídONLNd
  73. ùäó┘)calways pass zero. ▀4▀∙
  74. (≥6QuickTime 1.6 Tech Note(≥█7) of 18 b╫#      #╫ 
  75. d,Times
  76. .+6,Macintosh Technical Notes .4.∙ ídONLNd!(C+    Errors,
  77. Courier    ídONLNd(!3D* cDevErrídONLNd(ä3Φ)cNot a screen device.ídONLNd%2!=S(Y?
  78. controlErrídONLNd02ä=V)c*Video driver can not respond to this call.ídONLNd[`n∩(è6Base Media Handler Enhancements ì4ì∙ ídONLNd{{ç-*The ídONLNd{-ç┌)VBase Media Handler interface has been extended with 3 new calls, and a new flag. TheseídONLNd╓çô≤(»6,features were added to provide high quality ídONLNdç≤ô┌)█,movie playback. The text media handler takesídONLNd/ôƒÇ(╗6Madvantage of these new calls, and provides built-in support for anti-aliased ídONLNd|ôǃ┌(╗₧text. It is achievedídONLNd惽Æ(╟6through a playback hint ídONLNd⌐ƒÆ½┌)z=to the base media handler, which the Apple Text Media HandlerídONLNdτ½╖B(╙6
  79. derives.  ídONLNd±½B╖s)* This hint,     ídONLNdⁿ¼s╖├)1hintsHighQuality ídONLNd ½├╖┌)P6, has been discussed in the Movie Toolbox EnhancementsídONLNdC╖├Z(▀6section above.ídONLNdR╧█-*The     ídONLNdV╨-█n)MediaSetHints ídONLNdc╧n█à)A and     ídONLNdh╨à█ )MediaGetOffscreenBufferSize ídONLNdâ╧ █┌)ç) routines were added to the Derived MediaídONLNd¡█τQ(6@Handler interface to support high quality mode. Since the Apple ídONLNdφ█Qτ┌(oText Media Handler derivesídONLNdτ≤(6Pthe base media handler, it can use these new calls to support anti-aliased text.ídONLNdY!o+    MediaSetHints -=-∙ídONLNdg!E*When     ídONLNdlEÜ)$SetMoviePlayHints ídONLNd}Ü▓)U or     ídONLNdü▓)SetMediaPlayHints ídONLNdÆá)U is called by an application, ídONLNd░á┌)Ö
  80. your mediaídONLNd╗!'Q(C?
  81. handler╒s     ídONLNd┼Q'Æ)0MediaSetHints ídONLNd╥Æ'─)A  routine is ídONLNd▐─'┌)29called. This allows you to implement appropriate behaviorídONLNd'!3m(O?Efor the various media hints such as scrub mode and high quality mode.    ídONLNd^?!Jä*Gpascal ComponentResult MediaSetHints (ComponentInstance ci, long hints)ídONLNdªU!`+*ciídONLNd⌐Uä`[)c+Component instance of a base media handler.ídONLNd╒_!j:(å?hintsídONLNd█_äjì)c5All hint bits the currently apply to the given media. ídONLNdu!üC(¥?Errors    ídONLNdü!îà* badComponentInstanceídONLNd.ü¿î┌)ç
  82. 0x80008001ídONLNd9ü≡î|)HGet a new component instance ídONLNdVÜ!ª╝(┬?MediaGetOffscreenBufferSize ┼=┼∙ídONLNdsº!│*+Before the Base Media Handler allocates an ídONLNd₧º│┌)µ'offscreen buffer for your Derived MediaídONLNd╞│!┐Ä(█?Handler, it calls your     ídONLNd▌┤Ä┐)mMediaGetOffscreenBufferSize ídONLNd°│┐¿)ç routine to allow your media ídONLNd│¿┐┌)ô
  83. handler toídONLNd ┐!╦(τ?2chose the dimensions of the buffer. The depth and ídONLNdR┐╦┌)∩,color table that will be used for the bufferídONLNd╦!╫π(≤?)are also passed. When you are called the     ídONLNd¿╠π╫)┬
  84. rectBounds ídONLNd▓╦╫å)2 parameter specifies the ídONLNd╦╦å╫┌)qsize that the BaseídONLNd▐╫!π┬( ? Media Handler will use for your ídONLNd■╫┬π┌)í8offscreen by default. You can modify this as appropriateídONLNd7π!∩à( ?Kbefore returning. This capability is useful if your media handler can only ídONLNdéπà∩┌( údraw at particularídONLNdò∩!√Ü(?sizes. It is also useful for ídONLNd▓∩Ü√┌)yBimplementing anti-aliased drawing as you can request a buffer thatídONLNd⌡√!J(#?
  85. is larger ídONLNd √J┌))Pthan your destination area, and have the Base Media Handler scale the image downídONLNdP!G(/?for you.    ídONLNdZ!*º*Npascal ComponentResult MediaGetOffscreenBufferSize (ComponentInstance ci, RectídONLNd⌐)!4≤*
  86. **rectBounds, short depth, CTabHandle ctab)ídONLNd╘=!H+*ciídONLNd╫=äH[)c+Component instance of a base media handler.ídONLNd    G!R:(n?Rect ídONLNd        GäRQ)c)The boundaries of your off-screen buffer.ídONLNd    3Q!\:(x?depthídONLNd    9Qä\≈)cDepth of the offscreen.ídONLNd    Q[!f5(é?ctabídONLNd    V[äf║)c>Color table associated with off-screen. You can set it to nil. ídONLNd    òq!}C(Ö?Errors    ídONLNd    ¥}!êà* badComponentInstanceídONLNd    ▓}¿ê┌)ç
  87. 0x80008001ídONLNd    ╜}≡êü)HGet a new component instance. ▀4▀∙
  88. (≥68) of 18(≥æQuickTime 1.6 Tech Note ┌╫#      #╫ 
  89. d,Times
  90. .+6,Developer Technical Support(,╠
  91. April 1993 .4.∙ ídONLNd!(r(D? MediaGetName G=G∙,
  92. Courier    ídONLNd*!5]* MediaGetName ídONLNd)]5ï)<= let's you retrieve the name of the media type. For example, ídONLNdV)ï5┌(Q⌐the video mediaídONLNdf5!A╥(]?'handler will return the string "Video".    ídONLNdÄK!V*Fpascal ComponentResult MediaGetName(MediaHandler mh, Str255 name, longídONLNd╒U!`ε*
  93. )requestedLanguage, long *actualLanguage )ídONLNd i!tv*ComponentInstanceídONLNdiät$)c The base media handler instance.ídONLNd2s!~?(Ü?Str255ídONLNd9sä~ )cThe name of the media type.ídONLNdU}!ê5(ñ?LongídONLNdZ}äê┘)cA bunch of flags. ídONLNdlô!ƒC(╗?Errors    ídONLNdtƒ!¬à* badComponentInstanceídONLNd냿¬┌)ç
  94. 0x80008001ídONLNdöƒ≡¬ü)HGet a new component instance.ídONLNd▓═█∩(≈6Text Media Handler Enhancements ·4·∙ ídONLNd╥Φ⌠╩*]The text media handler interface includes 6 new flags, and one new routine. The flags let youídONLNd0⌠╩* ^control the behavior of the text media handler. The display flags are used in conjunction withídONLNdÅ )* the     ídONLNdô) `) AddTESample ídONLNd₧` w)7 and     ídONLNdúw ╕)AddTextSample ídONLNd░╕ î)A/ routines. The display flags are passed in the     ídONLNd▀î ╚)╘ displayFlags ídONLNd∞ I(46
  95. parameter.    ídONLNd≈%0r*dfContinuousScroll ídONLNd    $r0╢)ZF is a display flag which tells the Apple Text Media Handler to let newídONLNdP0<φ(X6-samples cause previous samples to scroll out.    ídONLNd~GRO* dfFlowHoriz ídONLNdëFOR╕)7O is a display flag which tells the Apple Text Media Handler to let horizontallyídONLNd┘R^═(z6cscrolled text to flow within the text box. This behavior contrasts with letting text flow as if theídONLNd=^jû* text box had no right edge.    ídONLNdYwéT* dfDropShadow ídONLNdevTé╔)<P is a display flag which tells the Apple Text Media Handler to support true dropídONLNd╢éÄg(¬6shadows. Using     ídONLNd┼âgÄ╝)OSetTextSampleData ídONLNd╓é╝Ä╤)U;, the position and translucency of the drop shadow is underídONLNdÄÜr(╢6application control.    ídONLNd'Ñ░O* dfAntiAlias ídONLNd2ñO░╓)7V is a display flag which tells the Apple Text Media handler to attempt to display textídONLNdë░╝P(╪6anti-aliased.    ídONLNdù╔╘O* dfKeyedText ídONLNdó╚O╘╔)7S is a display flag which tells the Apple Text Media handler to render text over theídONLNd÷╘α╝(ⁿ6Ubackground without drawing the background color. This technique is otherwise known asídONLNdLα∞c* "Masked Text."    ídONLNd[°6*enum {ídONLNdbw*
  96. dfContinuousScroll ídONLNdväº)l= 1<<9,ídONLNd T(36 dfFlowHoriz ídONLNdì ä¼)l= 1<<10,ídONLNdû!Y(=6dfDropShadow ídONLNdÑä!¼)l= 1<<12,ídONLNd» +T(G6 dfAntiAlias ídONLNd╜ ä+¼)l= 1<<13,ídONLNd╟*5T(Q6 dfKeyedText ídONLNd╒*ä5º)l= 1<<14ídONLNd▌4?"([6};ídONLNdαKVm*findTextUseOffset ídONLNd±JmV4)U) is a new find text flag which instructs     ídONLNdK4Vp)╟ FindNextText ídONLNd&JpV┌)< to look at the valueídONLNd<Vbr(~6pointed to by the ídONLNdNVrb┌)ZIoffset parameter and start the search at that offset into the text sampleídONLNdÿbnT(è6indicated by     ídONLNdÑcTnü)<    startTime ídONLNd«bünï)-:. This allows you to continue a text search from within a ídONLNdΦbïn┌(è⌐given sample, soídONLNd∙nzÿ(û6Sthat multiple occurrences of the search string can be found within a single sample. ▀4▀∙
  97. *\QuickTime 1.6 Tech Note(≥█9) of 18 X╫#      #╫ 
  98. d,Times
  99. .+6,Macintosh Technical Notes .4.∙,
  100. Courier    ídONLNd&1ï*!findTextUseOffset = 16; ídONLNd<!Hê+    SetTextSampleData g=g∙    ídONLNd+J!Uv*SetTextSampleData ídONLNd<IvU)U# allows you to set values prior to ídONLNd_IU4)¢calling     ídONLNdgJ4Uu)#AddTextSample ídONLNdtIuUç)A or     ídONLNdxJçU╛) AddTESample ídONLNdâI╛U┌)7. TwoídONLNdëU!aV(}?Btypes are currently supported: 'drpo' and 'drpt'. The first type, ídONLNd╦UVa┌(}t'drpo', is the drop shadowídONLNdµa!mƒ(ë?offset. Pass the address ídONLNd aƒm┌)~<of a point for the data parameter. 'drpt' is the drop shadowídONLNd<m!y╖(ò?Ytranslucency. Pass a value from 0 to 255, where 0 is the lightest and 256 is the darkest.    ídONLNdûâ!Ä╧*Vpascal ComponentResult SetTextSampleData(MediaHandler mh, void *data, OSType dataType)ídONLNdφù!ó+*mhídONLNd≡ùäó┐)c?Reference to the text media handler. Could use GetMediaHandler.ídONLNd0í!¼5(╚?dataídONLNd5íä¼o)c/Pointer to data, defined by dataType parameter.ídONLNdf½!╢S(╥?
  101. handleTypeídONLNdq½ä╢║)c>Sets the type of data in the handle. For now, either 'drpo' orídONLNd░╡ä└º*
  102. 'drpt'. ídONLNd╕╦!╫C(≤?Errors    ídONLNd└╫!Γà* badComponentInstanceídONLNd╒╫¿Γ┌)ç
  103. 0x80008001ídONLNdα╫≡Γ«)H&Your media handler reference is hosed. ídONLNdδ!≈.(?7Here is some sample pseudo-code (it might not compile):    ídONLNd?! ?*short ídONLNdF` £)? trans = 127;ídONLNdS !:(2?PointídONLNdY `ù)? dropOffset;ídONLNde!*┴(F? dropOffset.h = dropOffset.v = 4;ídONLNdå)!4*
  104. -SetSampleData(mh,(void *)&dropOffset,'drpo');ídONLNd┤3!>Θ*
  105. (SetSampleData(mh,(void *)&trans,'drpt'); ídONLNd▌I!Uè*Be sure to turn on the     ídONLNd⌠JèU╞)i dfDropShadow ídONLNdI╞UG)< display flag when you call     ídONLNdKGTä)üAddTextSample ídONLNd)IäUö)= or     ídONLNd-JöU╦) AddTESample ídONLNd8I╦U╬)7.ídONLNd:m{(ù6$Import/Export Component Enhancements Ü4Ü∙ ídONLNd_êöò*GExport components have one new flag, one new error, two new functions, ídONLNdªêòö┌(░│ one new dataídONLNd│öá⌐(╝6structure, one new component, ídONLNd╤ö⌐á┌)æ:and an enhancement to the Sound Export component. The TextídONLNd á¼ö(╚6Movie export component ídONLNd#áö¼┌)|>was introduced above. Import components have one new function.ídONLNdb¼╕K(╘6;The Audio CD Movie Import component was already introduced.    ídONLNd₧┼╨ƒ*canMovieExportAuxDataHandle ídONLNd╣─ƒ╨╪)ç  is a movie ídONLNd┼─╪╨┌)9/export component flag. A Movie Export Component ídONLNd⌡╨▄è(°6that supports the     ídONLNd╤è▄)rMovieExportGetAuxiliaryData ídONLNd"╨▄k)ç call should  ídONLNd/╨k▄┌)Zalso now set the    ídONLNd@▌Φƒ(6canMovieExportAuxDataHandle ídONLNd[▄ƒΦ╤)ç flag in its     ídONLNdh▌╤Φ)2ComponentFlags ídONLNdv▄Φ)F.    ídONLNdy⌠< ß(Z!canMovieExportAuxDataHandle = 128 ídONLNd¢
  106. K(26
  107. The error     ídONLNdÑ Kß)3auxiliaryExportDataUnavailable ídONLNd├
  108. ßµ)û ídONLNd─
  109. µ┌).has been added. It will be returned by a MovieídONLNd≤"ö(>6Export Component when     ídONLNd    ö")|MovieExportGetAuxiliaryData ídONLNd$")ç is called requesting ídONLNd:"┌)da type of auxiliaryídONLNdN".╓(J6(data that the component cannot generate.    ídONLNdy:<E·+$&auxiliaryExportDataUnavailable = -2058 ídONLNdáP\π(x6%The Sound Movie Export component has ídONLNd┼Pπ\┌)╦/been updated to take advantage of the new SoundídONLNd⌡\h(ä6Manager. Previously, ídONLNd
  110. \h┌)gFonly the first sound track in the movie was exported. Now sound tracksídONLNdQht±(É6-are mixed together before being exported. If ídONLNd~h±t┌)┘/your application wants to take advantage of theídONLNd«tÇ¿(£6sound mixing, you can use     ídONLNd╚u¿Ç)ÉPutMovieIntoTypedHandle ídONLNd▀tÇa)s. It will take ídONLNdεtaÇ┌)Fadvantage of the exportídONLNd    ÇîQ(¿6>component. Furthermore, you can now specify the format of the ídONLNd    DÇQî┌(¿oexported sound, so you canídONLNd    _îÿ9(┤6>convert 16 bit sound to 8 bit sound, or reduce stereo to mono. ▀4▀∙
  111. *>10)
  112.  of 18(≥æQuickTime 1.6 Tech Note °╫#      #╫ 
  113. d,Times
  114. .+6,Developer Technical Support(,╠
  115. April 1993 .4.∙ ídONLNd!(┘(D?MovieExportSetSampleDescription G=G∙,
  116. Courier    ídONLNd 4!?╝*MovieExportSetSampleDescription ídONLNd?3╝?₧)¢0 allows an application to request the format of ídONLNdo3₧?┌)Γ the exportedídONLNd|?!Kw(g?data, the routine     ídONLNdÄ@wK)VMovieExportSetSampleDescription ídONLNd¡?Kè)¢ has been added. This ídONLNd├?èK┌)xcall is currentlyídONLNd╒K!W(s?.supported by the Movie Export Sound Component.    ídONLNda!l▒*Ppascal ComponentResult MovieExportSetSampleDescription(MovieImportComponent  ci,ídONLNdUk<v'+
  117. /SampleDescriptionHandle desc, OSType mediaType)ídONLNdà!è+(ª?ciídONLNdêäèe)c-Component Instance of movie import component.ídONLNd╢ë!ö5(░?descídONLNd╗ëäöo)c/Handle to a valid QuickTime sample description.ídONLNdδô!₧N(║?    mediaTypeídONLNd⌡ôä₧ª)c:The type of the media that the sample description is from. ídONLNd0⌐!╡C(╤?Errors    ídONLNd8╡!└à* badComponentInstanceídONLNdM╡¿└┌)ç
  118. 0x80008001ídONLNdX╡≡└ü)HGet a new component instance. ídONLNdv╔!╒▌(±?MovieImportGetAuxiliaryDataType ⌠=⌠∙    ídONLNdû╫!Γ╝*MovieImportGetAuxiliaryDataType ídONLNd╡╓╝Γª)¢6 should return the type of the auxiliary data that it ídONLNdδ╓ªΓ┌)Ω can accept.ídONLNd≈Γ!εö(
  119. ?This is useful if you are ídONLNdΓöε┌)sDinterested with import components directly. For example, if you callídONLNdVε!·┼(?athe text import component with this call, it will indicate that it can accept 'styl' information.    ídONLNd╕!╢*Qpascal ComponentResult MovieImportGetAuxiliaryDataType(MovieImportComponent  ci, ídONLNd
  120. <î+
  121. OSType *auxType)ídONLNd"!-+(I?ciídONLNd"ä-ì)c5The movie import component instance. Retrieve it withídONLNdT,ä7B*
  122. &OpenDefaultComponent or OpenComponent.ídONLNd{6!AD(]?auxTypeídONLNdâ6äA≈)cPointer to the type of ídONLNdÜ6≈A┌)s,auxiliary data it can import. For example, aídONLNd╟@äK╨(gó@text import component can bring in 'text' data. But, if it says ídONLNd@╨K┌(gεitídONLNd
  123. JäUΘ(qócan return 'styl', ídONLNdJΘU┌)e,then it will import the style information asídONLNdJTä_¥({ówell. ídONLNdPj!vC(Æ?Errors    ídONLNdXv!üà* badComponentInstanceídONLNdmv¿ü┌)ç
  124. 0x80008001ídONLNdxv≡ü╤)H-Your movie import component reference is bad. ídONLNdªîÿ⌠(┤61Here is a new data structure for the text export ídONLNd╫î⌠ÿ┌)▄1component. This data is useful after a text trackídONLNd    ÿñ├(└6Zhas been exported. An application may want to know the way the text was stored as a track.    ídONLNdd░!╗q+    typedef struct {ídONLNdv║<┼P+
  125. longídONLNd|║ä┼┼)HdisplayFlags;ídONLNdï─<╧P(δZlongídONLNdæ─ä╧▐)HtextJustification;ídONLNdÑ╬<┘d(⌡ZRGBColorídONLNd«╬ä┘¼)HbgColor;ídONLNd╕╪<πP( ZRectídONLNd╛╪äπ¼)HtextBox;ídONLNd╚Γ<φU(    ZshortídONLNd╧Γäφ└)H beginHilite;ídONLNd▌∞<≈U(ZshortídONLNdΣ∞ä≈╢)H
  126. endHilite;ídONLNd≡÷<d(ZRGBColorídONLNd∙÷ä└)H hiliteColor;ídONLNd< _('ZBooleanídONLNdä ╩)HdoHiliteColor;ídONLNd
  127. <i(1Z    TimeValueídONLNd)
  128. ä╧)HscrollDelayDur;ídONLNd:<U(;ZPointídONLNdAä┘)HdropShadowOffset;ídONLNdT<)U(EZshortídONLNd[ä)≈)HdropShadowTransparency;ídONLNds(!3{(O?} TextDisplayData; ▀4▀∙
  129. (≥6QuickTime 1.6 Tech Note(≥╓11)
  130.  of 18 ε╫#      #╫ 
  131. d,Times
  132. .+6,Macintosh Technical Notes .4.∙ ídONLNd!(░+    TextExportGetDisplayData G=G∙,
  133. Courier    ídONLNd*!5Ö*TextExportGetDisplayData ídONLNd1)Ö5q)x, returns the text display data for the text ídONLNd])q5┌)╪sample that was lastídONLNdr5!Aq(]?Gexported by the given text export component. After exporting text from ídONLNd╣5qA┌(]Åa text track, it is oftenídONLNd╙A!M;(i?>useful to find out about the text track characteristics. This ídONLNdA;M┌(iY"data structure contains this extraídONLNd4M!Y[(u? information.    ídONLNdAc!nÄ*Ipascal ComponentResult TextExportGetDisplayData(TextExportComponent  ci, ídONLNdïm<x¬+
  134. TextDisplayData *data)ídONLNdóü!î+(¿?ciídONLNdÑüäîê)c4The text export component instance. Retrieve it withídONLNd┌ïäûB*
  135. &OpenDefaultComponent or OpenComponent.ídONLNdò!áX(╝? displayDataídONLNdòäá))c!Pointer to the text display data. ídONLNd/½!╖C(╙?Errors    ídONLNd7╖!┬à* badComponentInstanceídONLNdL╖¿┬┌)ç
  136. 0x80008001ídONLNdW╖≡┬╤)H-Your movie import component reference is bad.ídONLNdà┘τW(6    ColorSync 4∙ ídONLNdÅ⌠₧*RColorSync is an extension for Macintosh providing a platform for consistent color ídONLNdß⌠₧┌(╝ reproductionídONLNdε ╢((6between widely varying output ídONLNd ╢ ┌)₧6devices. Color Matching ability was added to the ImageídONLNdC ç(46Compression Manager     ídONLNdWç╛)o DrawPicture ídONLNdb ╛⌐)73 calls. Accurate color reproduction of images (not ídONLNdò ⌐┌)δ
  137. movies) isídONLNdá$╤(@6&made easier with QuickTime╒s flexible     ídONLNd╞╤$)╣ DrawPicture ídONLNd╤$u)7 calls.  To enable color ídONLNdΩu$┌)mmatching you simplyídONLNd■$0;(L6set the     ídONLNd%;0ï)#useColorMatching ídONLNd$ï0▓)P     flag in ídONLNd$▓0┌)'=the flags parameter to these calls. You can set the flag evenídONLNd]0<1(X6=when ColorSync is not installed, although it will be ignored.    ídONLNd£H<Sá+$useColorMatching = 4ídONLNd▒jx▀(ö6Sequence Grabber Enhancement ù4ù∙ ídONLNd╬àæσ*(The Sequence Grabber component has just ídONLNd÷àσæJ)═one flag added to it.     ídONLNd åJæ«)egrabPictCurrentImage ídONLNd à«æ┌)d     is a newídONLNd*æ¥M(╣6 flag to the     ídONLNd6ÆM¥)5
  138. SGGrabPict ídONLNd@æ¥Ñ)2
  139.  call. It ídONLNdJæÑ¥┌)&?provides the fastest possible image capture, but may fail underídONLNdè¥⌐≥(┼62certain circumstances. This failure is not fatal; ídONLNd╝¥≥⌐┌)┌3it just will not return a picture. The routine doesídONLNd≡⌐╡(╤66not pause the current preview or grab the next frame. ídONLNd&⌐╡┌)·*It causes the currently displayed image toídONLNdQ╡┴┴(▌6'be captured. It is a good idea to call     ídONLNdx╢┴┴Σ)⌐SGPause ídONLNd╡Σ┴T)# yourself before calling     ídONLNdÿ╢T┴å)p
  140. SGGrabPict ídONLNdó╡å┴╔)2 with this flag.    ídONLNd┤═<╪┤(⌠ZgrabPictCurrentImage = 4ídONLNd═∩²╜(6Image Codec Enhancement 4∙ ídONLNdσ
  141. c*;The interface for image codecs has three new functions and ídONLNd 
  142. c┌(2üone new flag defined.    ídONLNd6"ò(>6codecConditionFirstScreen ídONLNdOò"£)}9 is a new  codec condition flag to the ImageCodec.h file.    ídONLNdè,<7ß(SZ!#define codecConditionFirstScreenídONLNd¼,≡7)┤(1L<<12) ídONLNd╡BN╨(j6UThe Standard Compression Dialog now provides Compressor Components with the option ofídONLNd NZ¡* Xdisplaying their own settings within the dialog. If a compressor supports the dialog, anídONLNddZf╓* ^additional button will appear. The compressors settings are saved with the standard compressorídONLNd├frl* settings when the 
  143. ídONLNd╒flró)T    SCGetInfo ídONLNd▐fór)6 call is used with the 
  144. ídONLNd⌡frv)bscCodecSettingsType ídONLNd    fvr╘)r flag. The codec canídONLNd    r~<(Ü6?implement the functionality using the following three routines. ▀4▀∙
  145. *X12)
  146.  of 18(≥æQuickTime 1.6 Tech Note ┌╫#      #╫ 
  147. d,Times
  148. .+6,Developer Technical Support(,╠
  149. April 1993 .4.∙ ídONLNd(!4ç(P?CDRequestSettings S=S∙,
  150. Courier    ídONLNd@!Kv*CDRequestSettings ídONLNd#?vK⌐)UC allows the display of a dialog of additional compression settings ídONLNdf?⌐K┌(g╟ specific toídONLNdrK!WÑ(s?the codec. This information ídONLNdÄKÑW┌)äAis stored in a settings handle. The codec can store whatever dataídONLNd╨W!c⌐(?Win any format wants in the settings handle and resize it accordingly.  It should store ídONLNd'W⌐c┌(╟    some typeídONLNd1c!o(ï?5of tag/version information that it can use to verify ídONLNdfco┌)≤(that the data belongs to the codec.  TheídONLNdÅo!{╪(ù?$codec should NOT dispose the handle.    ídONLNd┤à!É╩*Upascal ComponentResult CDRequestSettings(ComponentInstance ci,  Handle settings, RectídONLNd
  151. Å!Ü╨*
  152. #*rp, ModalFilterProcPtr filterProc)ídONLNd.ú!«+*ciídONLNd1úä«)cComponent instance of codec.ídONLNdN¡!╕I(╘?settingsídONLNdW¡ä╕╬)cBHandle of data specific to the codec.  If the handle is empty, theídONLNdÜ╖ä┬o*
  153. /codec should use some type of default settings.ídONLNd╠┴!╠+(Φ?rpídONLNd╧┴ä╠▒)cPointer ídONLNd╫┴▒╠┌)-3to rectangle giving the coordinates of the StandardídONLNd ╦ä╓í(≥ó9Compression dialog in screen coordinates.  The codec can ídONLNdD╦í╓┌(≥┐ use this toídONLNdP╒äαâ(ⁿó3position its dialog in the same area of the screen.ídONLNdä▀!ΩS(?
  154. filterProcídONLNdÅ▀äΩ╝)c:A pointer to modal dialog filter proc that the codec must ídONLNd╔▀╝Ω┌(┌eitherídONLNd╨Θä⌠Æ(ó4pass to ModalDialog or call at the beginning of the ídONLNdΘÆ⌠┌(░codec dialog'sídONLNd≤ä■Ö(ó1filter.  This proc gives the calling application ídONLNdD≤Ö■┌(╖ and StandardídONLNdQ²äj($ó.Compression a chance to process update events. ídONLNdÇ!o(9?CDGetSettings <=<∙    ídONLNdÄ)!4b*CDGetSettings ídONLNd¢(b4ò)A@ allows a codec to get the settings chosen by a user. From this ídONLNd█(ò4┌(P│call, the codecídONLNdδ4!@D(\?should ídONLNd≥4D@┌)#[return its current internal settings.  If there are no current settings or the settings areídONLNdN@!LF(h?@the same as the defaults, the codec can set the handle to empty.    ídONLNdÅb!m¥*!Lpascal ComponentResult CDGetSettings(ComponentInstance ci,  Handle settings)ídONLNd▄v!ü+*ciídONLNd▀väü)cComponent instance of codec.ídONLNdⁿÇ!ïI(º?settingsídONLNdÇäï╬)cBA handle that the codec should resize and fill in with the currentídONLNdHèäò╔*
  155. Ainternal settings.  It should be resized to empty if there are noídONLNdèöäƒ*
  156. current internal settings. ídONLNdѬ!╢m(╥?CDSetSettings ╒=╒∙    ídONLNd│┬!═b*CDSetSettings ídONLNd└┴b═╚)A allows a codec to set ídONLNd╫┴╚═┌)f;the settings of the optional dialog. Set the codecs currentídONLNd═!┘─(⌡?Zinternal settings to the state specified in the settings handle.  The codec should always ídONLNdm═─┘┌(⌡Γdo aídONLNdr┘!σƒ(?Uvalidity check on the contents of the handle so that invalid settings are never used.    ídONLNd╚∩!·¥*Lpascal ComponentResult CDSetSettings(ComponentInstance ci,  Handle settings)ídONLNd!+*ciídONLNdäe)c-Component Instance of movie import component.ídONLNdF!I(4?settingsídONLNdOä╡)c=A handle to internal settings original returned by either theídONLNdìä"╪*
  157. DCDRequestSettings or CDGetSettings calls.  The codec should set it'sídONLNd╥!ä,╔*
  158. Ainternal settings to match those of the settings handle.  BecauseídONLNd    +ä6╙*
  159. Cthe codec does not own the handle, it should not dispose of it, andídONLNd    X5ä@╡*
  160. =should only copy its contents, not the handle itself.  If theídONLNd    û?äJ░*
  161. <settings handle passed in is empty, the codec should set itsídONLNd    ╙IäT=*
  162. %internal settings to a default state. ▀4▀∙
  163. (≥6QuickTime 1.6 Tech Note(≥╓13)
  164.  of 18 £╫#      #╫ 
  165. d,Times
  166. .+6,Macintosh Technical Notes .4.∙ídONLNd(:,*)New Component Manager Features Y4Y∙ ídONLNdHT╒*YThe Component Manager in QuickTime 1.6 has some new features. The result returned for theídONLNdyT`A*
  167. selector, ,
  168. Courier    ídONLNdâUA`á))gestaltComponentMgr ídONLNdûTá`¡)_9, will be 3, indicating version number 3 of the ComponentídONLNd╨`l┘(ê6bManager. It has added the ability to automatically resolve conflicts between different versions ofídONLNd3lx╠* \the same Component. It will ensure that only the most recent version of a given component isídONLNdÉxä┤* Vactually registered. In addition, the Component Manager now supports Icon Suites for aídONLNdτäÉé* JComponent, so a Component╒s icon no longer has to be just black and white.ídONLNd3₧¬0*The     ídONLNd7ƒ0¬à)ComponentResource ídONLNdH₧à¬æ)U4 data structure can now have an optional extension. ídONLNd|₧æ¬┌(╞»This extensionídONLNdï¬╢╢(╥6Vdefines additional information about the Component. The data structure is shown below.    ídONLNdΓ┴╠╟*#struct ComponentResourceExtension {ídONLNd╦<╓P+$
  169. longídONLNd ╦`╓╡)$componentVersion;ídONLNd╦≡╓r)É/* version of Component */ídONLNd;╒<αP(ⁿZlongídONLNd@╒`α╙)$componentRegisterFlags;ídONLNdX╒≡α|)É/* flags for registration */ídONLNdv▀<ΩU(ZshortídONLNd|▀`Ω┐)$componentIconSuite;ídONLNdæ▀≡Ωï)É/* resource id of Icon Suite */ídONLNd▒Θ⌠"(6};ídONLNd┤≤■q*
  170. Etypedef struct ComponentResourceExtension ComponentResourceExtension; ídONLNd·2*The     ídONLNd■    2┤)ComponentResourceExtension ídONLNd┤)é is appended ídONLNd%à)Mto the end of existing     ídONLNd<    à┌)äComponentResource ídONLNdN (<63structures. The Component Manager determines if it ídONLNdü ┌(<6'is present by examining the size of theídONLNd⌐ ,C(H6    resource.ídONLNd│8D/*The     ídONLNd╖9/D)componentVersion ídONLNd╟8D-)P# field contains the version number ídONLNdΩ8-D┌)« of the component. This should beídONLNd DP│(l6#identical to the value returned by     ídONLNd.E│P)¢GetComponentVersion ídONLNdADP)_. ídONLNdCDP┌)+For convenience, if this value is set to 0,ídONLNdoP\\(x6Bthe component is called to get the version. This is useful during ídONLNd▒P\\┌(xzdevelopment. The versionídONLNd╩\hk(ä6number stored in ídONLNd█\kh})Sthe     ídONLNd▀]}h )ComponentResourceExtension ídONLNd∙\ h┌)é* is used by the Component Manager to avoidídONLNd$ht┐(É6Yhaving to load and call the Component to retrieve the Component╒s version during startup.ídONLNd~Çî-*The     ídONLNdéü-î¢)componentRegisterFlags ídONLNdÿÇ¢î,)n  allow you to define additional ídONLNd╕Ç,î┌)æ%register information. These flags areídONLNd▐îÿY(┤6 shown below.    ídONLNd∞ú«╤*%// Component Resource Extension flagsídONLNd¡╕6*
  171. enum {ídONLNd╖<┬╥+$
  172. componentDoAutoVersion = 1<<0,ídONLNd:┴<╠▄*
  173.  componentWantsUnregister = 1<<1,ídONLNd\╦<╓ *
  174. 'componentAutoVersionIncludeFlags = 1<<2ídONLNdä╒α"(ⁿ6}; ídONLNdçΩ÷0*The     ídONLNdïδ0÷₧)componentDoAutoVersion ídONLNdíΩ₧÷╝)n flag ídONLNdºΩ╝÷┌)3tells the Component Manager that you only want yourídONLNd█÷@(6@Component registered if there is no later version available. If ídONLNd÷@┌(^ there is an older version of theídONLNd<ä(*6IComponent installed, it will be unregistered. If an older version of the ídONLNdàä┌(*ósame ComponentídONLNdö└(66(attempts to register after you, it will ídONLNd╝└┌)¿;be immediately unregistered. Further, if a newer version ofídONLNd°&(B61the same Component registers after you, you will ídONLNd    )&┌)∙(automatically be unregistered. Using theídONLNd    R&2{(N6Iautomatic version control feature of the Component Manager allows you to ídONLNd    ¢&{2┌(NÖmake sure that onlyídONLNd    »2>E(Z6    the most ídONLNd    ╕2E>┌)-Precent version of your software is running on a given machine, regardless of howídONLNd
  175.     >J┤(f6 many versions many be installed.ídONLNd
  176. *Vb-*The     ídONLNd
  177. .W-bÑ)componentWantsUnregister ídONLNd
  178. FVÑb)x flag indicates that your ídONLNd
  179. `Vb┌)q'Component wants to be called when it isídONLNd
  180. êbnr(è6unregistered. This ídONLNd
  181. ¢brn┌)ZIis useful if your component allocates global memory at register time, forídONLNd
  182. σnz─(û6Zexample. The prototype of the unregister message is identical to the register message. If ídONLNd ?n─z┌(ûΓyourídONLNd DzåQ(ó6
  183. component ídONLNd NzQå┌)9Mhas never been opened, its unregister message will not be called. The routineídONLNd £åÆ╚(«6'selector for unregister is given below. ▀4▀∙
  184. *D14)
  185.  of 18(≥æQuickTime 1.6 Tech Note ╚╫#      #╫ 
  186. d,Times
  187. .+6,Developer Technical Support(,╠
  188. April 1993 .4.∙ ídONLNd(-(D6The ,
  189. Courier    ídONLNd-(═) componentAutoVersionIncludeFlags ídONLNd$═(s)á" flag tells the Component Manager ídONLNdFs(┌)ªto use the componentídONLNd[(4b(P6flags as criteria ídONLNdm(b4┌)JNfor it's component search. If a component wants automatic version control, theídONLNd╝4@u(\6FComponent Manager has to search for similar components. Normally, the ídONLNd4u@┌(\ôComponent ManagerídONLNd@L](h6only searches ídONLNd"@]L┌)EKfor another component using the type, subType, and manufacturer fields of a    ídONLNdnMX|(t6ComponentDescription ídONLNdéL|Xá)d2 record. This flag tells the Component Manager to ídONLNd┤LáX┌(t╛ include the    ídONLNd└Yd^(Ç6componentFlags ídONLNd╬X^d£)F in its search.    ídONLNd▐p{╟(ù6##define kComponentUnregisterSelect ídONLNdp╠{█)┤ -7 ídONLNdàæO(¡6Finally, the     ídONLNdåOæ⌐)7componentIconSuite ídONLNd&à⌐æ┌)Z? field allows you to provide the resource id of a System 7 IconídONLNdfæ¥0(╣6DSuite. If this field is 0, it indicates that there is no icon suite.ídONLNd¼╡!┴í+    $GetComponentIconSuite α=α∙    ídONLNd┬├!╬è*GetComponentIconSuite ídONLNd╫┬è╬ú)i: returns an Icon Suite for the given Component. This call ídONLNd┬ú╬┌(Ω┴
  190. only worksídONLNd╬!┌¥(÷?Son System 7 or later. If called on System 6, it returns an error. If the Component ídONLNdo╬¥┌┌(÷╗ doesn╒t haveídONLNd|┌!µ3(?an ídONLNd┌3µä):Icon Suite but does have a Component Icon (as returned by     ídONLNd╣█äµ╘(óGetComponentInfo ídONLNd╔┌╘µ┌)P),    ídONLNd╠τ!≥è(?GetComponentIconSuite ídONLNdßµè≥o)i1 creates an Icon Suite containing just the black ídONLNdµo≥┌)σand white ComponentídONLNd&≥!■╛(?Icon. In this way, you can use     ídONLNdE≤╛■')¥GetComponentIconSuite ídONLNdZ≥'■à)i without regard to ídONLNdm≥à■┌)^whether or not aídONLNd~■!
  191. M(&?<Component has an Icon Suite or just simply a Component Icon.ídONLNd╗!"r*BFor more details on Icon Suites, see the Tech Note on Icon Suites ídONLNd²r"┌(>É(M.IM.IconDrawing),ídONLNd"!.╬(J?!"Drawing Icons the System 7 Way".    ídONLNd3:!Eÿ*Kpascal OSErr GetComponentIconSuite(Component aComponent, Handle *iconSuite)ídONLNdP![S*
  192. aComponentídONLNdèPä[o)c/Component id, retrieved with FindNextComponent.ídONLNd║Z!eN(ü?    iconSuiteídONLNd─Zäe[)c+Pointer to the icon suite you will receive. ídONLNd≡p!|C(ÿ?Errors    ídONLNd°|!ç₧* invalidComponentID  -3000ídONLNd|¿çM)ç!Component reference is not valid.ídONLNd4¿║█(╒6QuickTime 1.6 Bug Fixes ┘4┘∙ ídONLNdL╚╘═*YQuickTime 1.6 fixes all known bugs in QuickTime 1.5. Many of these bugs are listed below.ídONLNdªα∞f*Movie ToolboxídONLNd┤°!°+    +Ñ╩The Movie Toolbox interesting time calls ídONLNd▀°°┌)╫,have been substantially improved. The valuesídONLNd * (,H/returned are much more consistant and accurate.ídONLNd<!(((D?Ñ╩    ídONLNd>((d) GetMoviePict ídONLNdJd(±)< has two major improvements:    ídONLNdg)34o(PQ GetMoviePict ídONLNds(o4])<2  no longer fails on certain Compact Video movies.    ídONLNdª53@o(\Q GetMoviePict ídONLNd▓4o@ÿ)<> now reports out of memory errors rather than returning empty ídONLNd≡4ÿ@┌(\╢pictures whenídONLNd■@3L|(hQmemory is low.ídONLNdX!d((Ç?Ñ╩    ídONLNdY(dç)UpdateMovieResource ídONLNd"Xçd/)_& has been fixed for single fork files.ídONLNdIp!|»(ÿ?XÑ╩Editing movie's with alternate tracks no longer causes duplicate tracks to be created. ▀4▀∙
  193. (≥6QuickTime 1.6 Tech Note(≥╓15)
  194.  of 18 ñ╫#      #╫ 
  195. d,Times
  196. .+6,Macintosh Technical Notes .4.∙ ídONLNd!(_+    BÑ╩Movie Uncover Procedures have been significantly improved. If a ídONLNdB_(┌(D}movie with tracks that areídONLNd](*4?(PH7semi-transparent has a Movie Uncover procedure set (by ,
  197. Courier    ídONLNdö)?4Ö(P]SetMovieCoverProcs ídONLNdª(Ö4╡)Z), the ídONLNd¡(╡4┌)uncoverídONLNd╡4*@ß(\H$procedure is now called before each ídONLNd┘4ß@┌)╖2frame to fill/erase the background. Previously theídONLNd @*L┐(hHMovie Toolbox performed the ídONLNd(@┐L┌)ò:erase, which limited a cover procedure aware application'sídONLNdcL*XP(tHoptions.ídONLNdld!p°(î?*Ñ╩The dialog sequence that appears when a ídONLNdûd°p┌)╫,movie data file is lost has been reworked toídONLNd├p*|(ÿH6eliminate the "This is not a valid movie file" dialog.ídONLNd·ê!öí(░?HÑ╩Fixed problem with deactivating and reactivating Compact Video movies ídONLNdBêíö┌(░┐ that causedídONLNdNö*á╙(╝H"╥shimmering╙ effects in the image.ídONLNdq¼!╕((╘?Ñ╩    ídONLNds¡(╕é)GetMoviePosterPict ídONLNdà¼é╕,)Z# now properly handles tracks which ídONLNd¿¼,╕┌)¬%are only in the poster and not in theídONLNd╬╕*─I(αHmovie.ídONLNd╒╨!▄▀(°?'Ñ╩Movies played in loop mode using the ídONLNdⁿ╨▀▄┌)╛2Movie Controller no longer briefly pause when theyídONLNd/▄*Φ)(H5jump from the end back to the beginning of the movie.ídONLNde⌠r(6Movie ControllerídONLNdv !â+    JÑ╩The Movie Controller performs much smarter drawing, so it takes up less ídONLNd└ â┌(4ítime during movieídONLNd╥*$W(@H    playback.ídONLNd▄0!<╢(X?VÑ╩The Movie Controller no longer leaves the port clip changed after drawing the badge.ídONLNd3HTå(p6Movie Import/ExportídONLNdG`!l╣+    SÑ╩The Import AIFF Sound File to Movie component now always imports the entire file.ídONLNd¢x!äô*Ñ╩The PICT and PICS ídONLNd»xôä┌)r=import components no longer scale down images larger than theídONLNdφä*ÉK(¼Hscreen.ídONLNd⌡£¿ü(─6Text Media HandlerídONLNd┤!└ù+    Ñ╩When multi-line text is ídONLNd"┤ù└┌)vCgrown, lines after line 1 were not displayed. The bug did not occurídONLNdf└*╠Σ(ΦH'when grown exactly 2x. It is now fixed.ídONLNdÄ╪!Σç(?Ñ╩Empty text samples ídONLNdú╪çΣ┌)fCsometimes caused the Text Media Handler to lose track of subsequentídONLNdτΣ*≡¥( Htext size. It is now fixed.ídONLNdⁿ!(($?Ñ╩    ídONLNd²(P)FindText ídONLNdⁿPw)(     did not ídONLNdⁿw┌)'Kdo "case insensitive" searches properly. Furthermore it tried to dispose ofídONLNdb*(0H4the text string that was passed in. It is now fixed.ídONLNdù !,((H?Ñ╩    ídONLNdÖ!(,P)FindText ídONLNdí P,å)(@ "wrap around" search did not always work properly. It now does.ídONLNdΓ8!D](`?CÑ╩Hilite text samples did not always display properly. They now do.ídONLNd&P!\╞*"Ñ╩If the track contained multiple ídONLNdHP╞\┌)Ñ5text descriptions, performance was sometimes severelyídONLNd~\*hí(äHdegraded -- not anymore.ídONLNdùt!Ç((£?8Ñ╩Text clipping and scrolling is now much more reliable.ídONLNd╨îÿ░(┤6Image Compression ManagerídONLNdΩñ!░%+    ÑídONLNd∞ñ*░?)    The     ídONLNd≡Ñ?░v) AlignWindow ídONLNd√ñv░h)77 call has been fixed to respect vertical repositioning. ▀4▀∙
  198. (≥616)
  199.  of 18(≥æQuickTime 1.6 Tech Note  ÷╫#      #╫ 
  200. d,Times
  201. .+6,Developer Technical Support(,╠
  202. April 1993 .4.∙ ídONLNd(4i(P6Compact VideoídONLNd@!L%+    ÑídONLNd@*Lé)    In some cases, the ídONLNd#@éL┌)XFCompact Video compressor allowed the data rate to exceed the limit setídONLNdjL*Xl(tHby the calling ídONLNdyLlX┌)BIapplication, causing playback problems from CD.  QuickTime 1.6 fixes thisídONLNd├X*d?(ÇHbug.ídONLNd╚p!|%(ÿ?ÑídONLNd╩p*|)    ,Decompressing gray scale Compact Video data ídONLNd÷p|┌)φ'to an 8-bit color destination no longerídONLNd|*êP(ñHcrashes.ídONLNd'öáù(╝6Photo CD DecompressorídONLNd=¼!╕%+    ÑídONLNd?¼*╕')    4More accurate colors in decompression are displayed.ídONLNdt─╨æ(∞6Standard CompressionídONLNdë▄!Φ%+    ÑídONLNdï▄*Φ5)    If ,
  203. Courier    ídONLNdÄ▌5ΦÖ) scAllowZeroFrameRate ídONLNdó▄ÖΦ()d" is true, default to 0 frame rate.ídONLNd┼⌠!%(?ÑídONLNd╟⌠*£)    JThe key frame rate now updates correctly when changed from hook procedure.ídONLNd !%(4?ÑídONLNd *K)    >Rate-constrain item checked if non-zero default value present.ídONLNdS$0w(L6Sequence GrabberídONLNdd<!H%+    ÑídONLNdf<*H=)    8Sound wouldn╒t get restarted or turned off correctly if ídONLNd₧<=H┌(d[ the record bit wasn╒t set in itsídONLNd┐H*T╣(pHchannel usage. It is now fixed.ídONLNd▀`!l%(ê?ÑídONLNdß`*la)    DVideo panel does not bus error if the digitizer doesn't support hue.ídONLNd&xäå(á6Component ManagerídONLNd8É!£}+    Ñ The Component ídONLNdHÉ}£┌)\BManager no longer changes the current resource file when loading aídONLNdï£*¿d(─H
  204. Component.ídONLNdû┤!└*(▄?Ñ ídONLNdÿ┤*└┌)    QThe Component Manager now tracks files using File ID's when possible, rather than    ídONLNdΩ┴*╠H* FSSpec ídONLNd≡└H╠R)'s.ídONLNd⌠╪!Σ%(?ÑídONLNd÷╪*Σµ)    &Fixed obscure boot problem that would ídONLNd╪µΣ┌)╝/hang the machine when a component was called toídONLNdLΣ*≡Z( H>register and the system heap was extremely low on free memory.ídONLNdïⁿ!%($?ÑídONLNdìⁿ*o)    It is now OK ídONLNdÜⁿo√)Eto pass an empty handle to     ídONLNd╡²√K)îGetComponentInfo ídONLNd┼ⁿK┌)P. This is helpful, since it canídONLNdσ*c(0H return them.ídONLNd≥*6y(R6Further Reference: U4U∙ídONLNd7*C.+ÑídONLNd7<CÄ)Inside MacintoshídONLNd7ÄC╚)R , QuickTimeídONLNd#C*O.(kHÑídONLNd%C<OÄ)Inside MacintoshídONLNd5CÄO)R, QuickTime Components ▀4▀∙
  205. (≥6QuickTime 1.6 Tech Note(≥╓17)
  206.  of 18